自定义转换器 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()
我在创建适用于 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()