我正在尝试创建一个管道来帮助我通过以下方式处理一些数据:插补平均值,缩放数据,然后拟合回归器。
我在使用估算器时遇到了一些麻烦,并且可能使用错误。我知道我的数据包含 NaN;但是当我尝试将它们放入管道中时,我收到一个值错误:
Traceback (most recent call last):
File "<ipython-input-124-8517b294cb64>", line 1, in <module>
modelBuild(df)
File "C:/Users/tmori/Google Drive/Projects/Product Dimension Accuracy/Qubert_PredictiveModel/qubert_predictive_model.py", line 81, in modelBuild
clf_x = pipeline.fit_transform(df[['OverallHeight-ToptoBottom', 'OverallDepth-FronttoBack']], df['OverallWidth-SidetoSide'])
File "C:Program FilesAnacondalibsite-packagessklearnpipeline.py", line 303, in fit_transform
return last_step.fit_transform(Xt, y, **fit_params)
File "C:Program FilesAnacondalibsite-packagessklearnbase.py", line 497, in fit_transform
return self.fit(X, y, **fit_params).transform(X)
File "C:Program FilesAnacondalibsite-packagessklearnensembleforest.py", line 248, in fit
y = check_array(y, accept_sparse='csc', ensure_2d=False, dtype=None)
File "C:Program FilesAnacondalibsite-packagessklearnutilsvalidation.py", line 407, in check_array
_assert_all_finite(array)
File "C:Program FilesAnacondalibsite-packagessklearnutilsvalidation.py", line 58, in _assert_all_finite
" or a value too large for %r." % X.dtype)
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
到目前为止,我的代码如下所示:
def modelBuild(df):
imp = Imputer()
scl = StandardScaler()
clf = RandomForestRegressor()
pipeline = Pipeline([('imputer', imp),
('scaler', scl),
('clf', clf)])
clf_x = pipeline.fit_transform(df[['OverallHeight-ToptoBottom', 'OverallDepth-FronttoBack']], df['OverallWidth-SidetoSide'])
以及数据帧数据的示例:
StagName OverallDepth-FronttoBack OverallHeight-ToptoBottom
PtagPrSKU
AABP1004 NaN 48.0
AAI2179 28.0 32.0
AAI2180 28.0 32.0
AAI2181 36.0 32.0
AAI2182 36.0 32.0
StagName OverallWidth-SidetoSide
PtagPrSKU
AABP1004 64.0
AAI2179 55.0
AAI2180 55.0
AAI2181 71.0
AAI2182 71.0
我很确定我只是错误地使用了 Imputer,但我一生都无法确定在哪里。
提前感谢所有的帮助!
最好 汤姆
尝试删除 PtagPrSKU 行。
因此,在列名之后,您应该只有它们的值。执行此操作的简单方法是在加载数据时使用 pandas 并定义跳跃。
以下内容对我来说很好用。
问题所在
PtagPrSKU 行为每列插入一个空单元格(这就是问题所在(。
我用于此示例的文件可以在此处找到链接
from sklearn.preprocessing import Imputer
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestRegressor
from sklearn.pipeline import Pipeline
import pandas as pd
def buildit(df):
imp = Imputer()
scl = StandardScaler()
clf = RandomForestRegressor()
pipeline = Pipeline([('imputer', imp), ('scaler', scl), ('clf', clf)])
clf_x = pipeline.fit_transform(df[['OverallHeight-ToptoBottom', 'OverallDepth-FronttoBack']], df['OverallWidth-SidetoSide'])
return clf_x
df = pd.read_excel('t.xlsx',skiprows=[1])
print(df)
buildit(df)
将缺失值标识符从"np.nan"更改为其他标识符(可能是 0 或非常大的数字(。我有同样的问题,这对我有用。