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

我有两种不同类型的缺失值(np.nan 和 None)的数据,我正在尝试使用 SimpleImputer 对它们进行估算。尽管我可以分两步完成此操作,但我想知道是否有办法将其合并为一个。我的代码如下:


import pandas as pd

import numpy as np

from sklearn.impute import SimpleImputer


train = 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')

但这似乎不起作用。


MM们
浏览 141回答 2
2回答

有只小跳蛙

严格来说,没有办法做到这一点SingleImputer。一个选项,如上一个答案中提到的,是使用 pandas' replace,但如果你想坚持使用 scikit-learn 工具包,你可以使用 aPipeline代替,这可以说比你的两步解决方案更优雅一点已经有:from sklearn.pipeline import Pipelinepipe = 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))这会给你同样的结果。

哆啦的时光机

如果你想用 'MISSING' 替换 None 和 np.nan 值,你可以使用 pd.DataFrame.replace()。test.replace(np.nan, "MISSING")            users0        MISSING1        MISSING2     John Smith3  Mary Williams4   Andy Rollins
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python