我正在尝试创建一个管道来帮助我处理一些数据:输入均值,缩放数据,然后拟合回归量。
我在使用Imputer时遇到了一些问题,并且可能使用了它。我知道我的数据包含NaN;但是当我尝试将它们插入管道内时,我得到一个ValueError:
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 Files\Anaconda\lib\site-packages\sklearn\pipeline.py", line 303, in fit_transform
return last_step.fit_transform(Xt, y, **fit_params)
File "C:\Program Files\Anaconda\lib\site-packages\sklearn\base.py", line 497, in fit_transform
return self.fit(X, y, **fit_params).transform(X)
File "C:\Program Files\Anaconda\lib\site-packages\sklearn\ensemble\forest.py", line 248, in fit
y = check_array(y, accept_sparse='csc', ensure_2d=False, dtype=None)
File "C:\Program Files\Anaconda\lib\site-packages\sklearn\utils\validation.py", line 407, in check_array
_assert_all_finite(array)
File "C:\Program Files\Anaconda\lib\site-packages\sklearn\utils\validation.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'])
以及DataFrame数据的示例:
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,但是我不能在我的生活中指出哪里。
提前感谢所有帮助!
最佳, 汤姆
答案 0 :(得分:0)
尝试删除PtagPrSKU行。
所以在列名后你应该只有它们的值。执行此操作的简单方法是在加载数据时使用pandas并定义skiprows。
以下对我来说很好。
问题
PtagPrSKU行为每列插入一个空单元格(这是问题所在)。
我可以在link
找到我用于此示例的文件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)
答案 1 :(得分:-1)
从&#39; np.nan&#39;更改您的缺失值标识符到其他东西(可能是0或非常大的数字)。我有同样的问题,这对我有用。