0

I am having trouble creating a custom transform that applies to a pandas dataframe

class attributeAdder(BaseEstimator,TransformerMixin):
    def __init__(self, add_target = True): 
        self.add_target = add_target
    def fit(self, X, y=None):
        return self
    def transform(self, X) :
        if self.add_target:
            X["failed"]=X["failures"].apply(lambda x: 0 if x==0 else 1)
            X.drop(columns=["failures"],inplace=True)
        return X


att_adder=attributeAdder()
df=attributeAdder.transform(df) 
df.head()

and I get this error

TypeError                                 Traceback (most recent call last)
<ipython-input-117-cc8d4ad8702f> in <module>
     14 
     15 att_adder=attributeAdder()
---> 16 df=attributeAdder.transform(df)
     17 df.head()
     18 

TypeError: transform() missing 1 required positional argument: 'X'

Does anyone knows what the problem is with this code ? Thank you

patelR
  • 25
  • 4

1 Answers1

0

The problem is you use the attributeAdder class to create an object att_adder, but didn't use this object with the dataframe. Just replace attributeAdder.transform(df) by att_adder.transform(df) will solve the problem.

It works:

import pandas as pd

class attributeAdder:
    def __init__(self, add_target = True): 
        self.add_target = add_target
    def fit(self, X, y=None):
        return self
    def transform(self, X):
        if self.add_target:
            X["failed"]=X["failures"].apply(lambda x: "No" if x==0 else "Yes")
            X.drop(columns=["failures"],inplace=True)
        return X

df = pd.DataFrame({"failures":[0, 1, 1, 0]})

att_adder=attributeAdder()
df=att_adder.transform(df)
df.head()
Hsuning
  • 76
  • 2