TypeError: DataFrameSelector() takes no arguments

it2023-12-16  79

先看源代码的构建:这里有3个步骤, 第一步:先获取到housing_num的列名,通过list方法

# 对housing_num取list得到列名、对housing_num通过list()方法,得到列名 num_attribs=list(housing_num) num_attribs

第二步:将DataFrame转换为ndarray,需要构建class

# dataFrame->series->ndarray class DataFrameSelector(BaseEstimator,TransformerMixin): def __int__(self,attribute_names): self.attribute_names = attribute_names def fit(self,X,y=None): return self def transform(self,X): return X[self.attribute_names].values

第三步创建转换pipeline,

num_pipeline = Pipeline([ ('selector', DataFrameSelector(num_attribs)), ('imputer', SimpleImputer(strategy="median")), ('attribs_adder', CombinedAttributesAdder()), ('std_scaler', StandardScaler()), ])

查看运行结果:

TypeError Traceback (most recent call last) <ipython-input-305-e06eb71a4ce0> in <module> 1 num_pipeline = Pipeline([ ----> 2 ('selector', DataFrameSelector(num_attribs)), 3 ('imputer', SimpleImputer(strategy="median")), 4 ('attribs_adder', CombinedAttributesAdder()), 5 ('std_scaler', StandardScaler()), TypeError: DataFrameSelector() takes no arguments

排查思路:先找到错误提示->再定位->分析问题->查询解决方案->验证解决方案->是否解决。

1.错误提示:TypeError: DataFrameSelector() takes no arguments 2. 定位:定位到DataFrameSelector应用环节

TypeError Traceback (most recent call last) <ipython-input-305-e06eb71a4ce0> in <module> 1 num_pipeline = Pipeline([ ----> 2 ('selector', DataFrameSelector(num_attribs)),

3.继续定位:定位到创建/定义环节

class DataFrameSelector(BaseEstimator,TransformerMixin): def __int__(self,attribute_names): self.attribute_names = attribute_names def fit(self,X,y=None): return self def transform(self,X): return X[self.attribute_names].values

4.分析问题,定义的代码跟学习到的代码没发现有不同,书写上也未发现有问题,自己分析未能找出问题,需要去寻解决方案

5.查询解决方案,将错误提示贴近浏览器搜索并查看以往的案例:TypeError: DataFrameSelector() takes no arguments 搜索出来的结果,可选择其中一个点开看下 6.找到了可能的原因: 可能原因是:

def __init__(self,name,age): 这里的 __init__下划线是左右两边各两个,不是一个 看是不是把__init__写成了__int__

对比自己的代码块: “把__init__写成了__int__”,修改代码块:

class DataFrameSelector(BaseEstimator,TransformerMixin): def __init__(self,attribute_names): self.attribute_names = attribute_names def fit(self,X,y=None): return self def transform(self,X): return X[self.attribute_names].values

重新运行如下代码:

num_pipeline = Pipeline([ ('selector', DataFrameSelector(num_attribs)), ('imputer', SimpleImputer(strategy="median")), ('attribs_adder', CombinedAttributesAdder()), ('std_scaler', StandardScaler()), ])

OK,未报任何错误,问题解决。

最新回复(0)