python - 管道输入错误 "Input Contains NaN"

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

我在使用 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,但我终究无法确定错误的位置。

在此先感谢您的所有帮助!

最好的, 汤姆

最佳答案

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

关于python - 管道输入错误 "Input Contains NaN",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45423783/

相关文章:

c# - 更改 RedirectUri、Nginx 和 ASP.NEt Core

php - 使用 PHP curl 从 Google 的地理编码 API 返回数据

ios - Xcode 和安装的 SF Pro Display(Apple 字体)

selenium - 使用 SendKeys 向 IE 11 发送 '@' 特殊字符

vue.js - token 失效时自动注销用户

spring - @Document(collection = "Test") 在 MongoRep

outlook - 仅在 Web 上启用 Outlook Web 插件

python-3.x - Python 3 文件共享变量

java - Hibernate ManyToOne 保存对象

hibernate - 如何将表名作为参数传递给 HQL 查询