自定义转换器 Python

Custom transformer 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'

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

问题是您使用 attributeAdder class 创建对象 att_adder,但没有将此对象与数据框一起使用。只需将 attributeAdder.transform(df) 替换为 att_adder.transform(df) 即可解决问题。

有效:

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