具有多个值的 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)
)
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)
)