具有多个值的 Scikit-learn Imputer

Scikit-learn Imputer with multiple values

Scikit-learn Imputer 是否有办法查找并替换多个被视为“缺失值”的值?

例如,我想做这样的事情

imp = Imputer(missing_values=(7,8,9))

但是根据文档,missing_values 参数只接受一个整数:

missing_values : integer or “NaN”, optional (default=”NaN”)

The placeholder for the missing values. All occurrences of missing_values will be imputed. For missing values encoded as np.nan, use the string value “NaN”.

为什么不在您的原始数据集中手动执行此操作?假设您使用的是 pd.DataFrame,您可以执行以下操作:

import numpy as np
import pandas as pd
from sklearn.preprocessing import Imputer

df = pd.DataFrame({'A': [1, 2, 3, 8], 'B': [1, 2, 5, 3]})
df_new = df.replace([1, 2], np.nan)
df_imp = Imputer().fit_transform(df_new)

这导致 df_imp:

array([[ 5.5,  4. ],
   [ 5.5,  4. ],
   [ 3. ,  5. ],
   [ 8. ,  3. ]])

如果你想让它成为管道的一部分,你只需要实现一个具有类似逻辑的自定义转换器。

您可以在管道中链接多个输入器,但这可能很快就会变得繁忙,我不确定效率如何。

pipeline = make_pipeline(
    SimpleImputer(missing_values=7, strategy='constant', fill_value=10),
    SimpleImputer(missing_values=8, strategy='constant', fill_value=10),
    SimpleImputer(missing_values=9, strategy='constant', fill_value=10)
)