【问题标题】:Pipeline Imputer Error "Input Contains NaN"管道输入器错误“输入包含 NaN”
【发布时间】:2018-01-07 11:48:21
【问题描述】:

我正在尝试创建一个管道来帮助我处理一些数据,方法是:估算均值、缩放数据,然后拟合回归量。

我在使用 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,但我终其一生都无法确定在哪里。

提前感谢所有帮助!

最好, 汤姆

【问题讨论】:

    标签: python scikit-learn pipelining


    【解决方案1】:

    尝试删除 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)
    

    【讨论】:

      【解决方案2】:

      将您的缺失值标识符从“np.nan”更改为其他值(可能是 0 或一个非常大的数字)。我有同样的问题,这对我有用。

      【讨论】:

        猜你喜欢
        • 2021-08-14
        • 1970-01-01
        • 2021-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多