为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 sklearn 的 SimpleImputer 中不同类型的缺失值合并为一个

如何将 sklearn 的 SimpleImputer 中不同类型的缺失值合并为一个

MM们 2022-06-14 17:39:50
我有两种不同类型的缺失值(np.nan 和 None)的数据,我正在尝试使用 SimpleImputer 对它们进行估算。尽管我可以分两步完成此操作,但我想知道是否有办法将其合并为一个。我的代码如下:import pandas as pdimport numpy as npfrom sklearn.impute import SimpleImputertrain = pd.DataFrame({        'users':[None,'John Johnson',np.nan,'John Smith','Mary Williams','ted bundy'],})test = pd.DataFrame({        'users':[None,np.nan,'John Smith','Mary Williams','Andy Rollins'],})si1 = SimpleImputer(strategy='constant',fill_value='NAN')si2 = SimpleImputer(strategy='constant',missing_values = None, fill_value='MISSING')train_imputed_interim1 = si1.fit_transform(train)train_imputed = si2.fit_transform(train_imputed_interim1)test_imputed_interim1 = si1.fit_transform(test)test_imputed = si2.fit_transform(test_imputed_interim1)print('\ntrain_imputed:')print(train_imputed)print('\ntest_imputed:')print(test_imputed)有没有办法将 si1 和 si2 合二为一。我试过了si = SimpleImputer(strategy='constant',missing_values = [None,np.nan], fill_value='MISSING')但这似乎不起作用。
查看完整描述

2 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

严格来说,没有办法做到这一点SingleImputer。


一个选项,如上一个答案中提到的,是使用 pandas' replace,但如果你想坚持使用 scikit-learn 工具包,你可以使用 aPipeline代替,这可以说比你的两步解决方案更优雅一点已经有:


from sklearn.pipeline import Pipeline


pipe = Pipeline([('si1',SimpleImputer(strategy='constant',fill_value='NAN')),

                ('si2', SimpleImputer(strategy='constant',missing_values = None, fill_value='MISSING'))])

print('\ntrain_imputed:')

print(pipe.fit_transform(train))

print('\ntest_imputed:')

print(pipe.transform(test))

这会给你同样的结果。


查看完整回答
反对 回复 2022-06-14
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

如果你想用 'MISSING' 替换 None 和 np.nan 值,你可以使用 pd.DataFrame.replace()。


test.replace(np.nan, "MISSING") 


           users

0        MISSING

1        MISSING

2     John Smith

3  Mary Williams

4   Andy Rollins


查看完整回答
反对 回复 2022-06-14
  • 2 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信