Scikit learn Sklearn';s SimpleImputer没有';你不能在管道里工作吗?

Scikit learn Sklearn';s SimpleImputer没有';你不能在管道里工作吗?,scikit-learn,pipeline,sklearn-pandas,Scikit Learn,Pipeline,Sklearn Pandas,我有一个pandas数据框,在特定列中有一些NaN值: 1291 NaN 1841 NaN 2049 NaN Name: some column, dtype: float64 为了解决这个问题,我制定了以下计划: from sklearn.preprocessing import StandardScaler from sklearn.impute import SimpleImputer from sklearn.pipeline import Pipeline scaler

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

1291   NaN
1841   NaN
2049   NaN
Name: some column, dtype: float64
为了解决这个问题,我制定了以下计划:

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)])
现在,当我将此管道传递给一个
随机搜索CV
时,我得到以下错误:

ValueError:输入包含NaN、无穷大或对数据类型('float64')太大的值。


它实际上比这要长一点——如果必要的话,我可以在编辑中发布整个错误。无论如何,我很确定这个专栏是唯一一个包含NAN的专栏。此外,如果我在管道中从
SimpleImputer
切换到(现在已弃用的)
Imputer
,管道在我的
RandomizedSearchCV
中运行良好。我查看了文档,但似乎
SimpleImputer
的行为(几乎)与
Imputer
完全相同。行为上的区别是什么?如何在我的管道中使用插补器而不使用弃用的
插补器?

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

imputer = SimpleImputer(strategy = 'median', fill_value = 0)

make_管道中的SimpleImputer

preprocess_pipeline = make_pipeline(   
    FeatureUnion(transformer_list=[
        ('Handle numeric columns', make_pipeline(
            ColumnSelector(columns=['Amount']),
            SimpleImputer(strategy='constant', fill_value=0),
            StandardScaler()
        )),
        ('Handle categorical data', make_pipeline(
            ColumnSelector(columns=['Type', 'Name', 'Changes']),
            SimpleImputer(strategy='constant', missing_values=' ', fill_value='missing_value'),
            OneHotEncoder(sparse=False)
        ))
    ])
)
simplemputer在管道中

('features', FeatureUnion ([
     ('Cat Columns', Pipeline([
          ('Category Extractor', TypeSelector(np.number)),
                 ('Impute Zero', SimpleImputer(strategy="constant", fill_value=0))
                                    ])),
('Numerics', Pipeline([
      ('Numeric Extractor', TypeSelector("category")),
          ('Impute Missing', SimpleImputer(strategy="constant", fill_value='missing'))
          ]))        
     ]))

如果独立运行
SimpleImputer
(不是从管道中运行),是否会出现相同的错误?当我传递-
SimpleImputer(strategy='constant',fill_value=0)时,是否会发现相同的错误
Comment by@FrédérandOuweric:您是否检查了目标变量不包含NaN值?插补器只处理输入特征中缺少的值。我也有同样的问题。事实证明,我必须明确指定缺少的_值=无。实际上,我认为这是默认行为。