Кастом трансформер Python - PullRequest
       1

Кастом трансформер Python

0 голосов
/ 12 апреля 2020

У меня проблемы с созданием пользовательского преобразования, которое применяется к 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'

Кто-нибудь знает, в чем проблема этот код? Спасибо

1 Ответ

0 голосов
/ 12 апреля 2020

Проблема в том, что вы используете класс attributeAdder для создания объекта 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()
...