猿问

自定义转换器 Python

我在创建适用于 pandas 数据框的自定义转换时遇到问题


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()


我得到这个错误


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'

有谁知道这段代码有什么问题?谢谢


jeck猫
浏览 105回答 1
1回答

杨__羊羊

问题是您使用attributeAdder该类创建一个对象att_adder,但没有将此对象与数据框一起使用。只需替换attributeAdder.transform(df)为 att_adder.transform(df)即可解决问题。有用:import pandas as pdclass attributeAdder:&nbsp; &nbsp; def __init__(self, add_target = True):&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; self.add_target = add_target&nbsp; &nbsp; def fit(self, X, y=None):&nbsp; &nbsp; &nbsp; &nbsp; return self&nbsp; &nbsp; def transform(self, X):&nbsp; &nbsp; &nbsp; &nbsp; if self.add_target:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; X["failed"]=X["failures"].apply(lambda x: "No" if x==0 else "Yes")&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; X.drop(columns=["failures"],inplace=True)&nbsp; &nbsp; &nbsp; &nbsp; return Xdf = pd.DataFrame({"failures":[0, 1, 1, 0]})att_adder=attributeAdder()df=att_adder.transform(df)df.head()
随时随地看视频慕课网APP

相关分类

Python
我要回答