管道估算器错误"Input Contains NaN"



我正在尝试创建一个管道来帮助我通过以下方式处理一些数据:插补平均值,缩放数据,然后拟合回归器。

我在使用估算器时遇到了一些麻烦,并且可能使用错误。我知道我的数据包含 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 或非常大的数字(。我有同样的问题,这对我有用。

相关内容

  • 没有找到相关文章

最新更新