Sklearn 的 SimpleImputer 在管道中不起作用?

Mar*_*cel 5 pipeline scikit-learn sklearn-pandas

我有一个 Pandas 数据框,它在特定列中有一些 NaN 值:

1291   NaN
1841   NaN
2049   NaN
Name: some column, dtype: float64
Run Code Online (Sandbox Code Playgroud)

我已经制作了以下管道来处理它:

from sklearn.preprocessing import StandardScaler
from sklearn.impute import SimpleImputer
from sklearn.pipeline import Pipeline

scaler = StandardScaler(with_mean = True)
imputer = SimpleImputer(strategy = 'median')
logistic = LogisticRegression()

pipe = Pipeline([('imputer', imputer),
                 ('scaler', scaler), 
                 ('logistic', logistic)])
Run Code Online (Sandbox Code Playgroud)

现在,当我将此管道传递给 a 时RandomizedSearchCV,出现以下错误:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

它实际上比那要长得多 - 如果需要,我可以在编辑中发布整个错误。无论如何,我很确定此列是唯一包含 NaN 的列。此外,如果我从管道中切换SimpleImputer到(现已弃用)Imputer,管道在我的RandomizedSearchCV. 我检查了文档,但似乎它的SimpleImputer行为方式(几乎)与Imputer. 行为有什么不同?如何在我的管道中使用输入器而不使用已弃用的Imputer

小智 0

我有同样的问题,但这解决了它:

imputer = SimpleImputer(strategy = 'median', fill_value = 0)
Run Code Online (Sandbox Code Playgroud)