这是我拥有的更大数据集的示例。
想象一下,我有一个包含不同列的数据框,并且每一列在某些部分都存在缺失值(NaN)。
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestRegressor
df = pd.DataFrame({'a':[0.3, 0.2, 0.5, 0.1, 0.4, 0.5, np.nan, np.nan, np.nan, 0.6, 0.3, 0.5],
'b':[4, 3, 5, np.nan, np.nan, np.nan, 5, 6, 5, 8, 7, 4],
'c':[20, 25, 35, 30, 10, 18, 16, 22, 26, np.nan, np.nan, np.nan]})
例如,我想使用RandomForestRegressor预测这些缺失值,并以其他列作为特征。换句话说,当我看到一个带有NaN的样本时,我想将其他两列中的值用作预测该缺失值的特征。
我通常可以针对独特功能执行此操作,但是我希望对每一列都执行自动操作。
谢谢。
答案 0 :(得分:1)
您可以使用sklearn中的IterativeImputer
,并在estimator参数中为其提供RandomForestRegressor
:
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
df = pd.DataFrame({'a':[0.3, 0.2, 0.5, 0.1, 0.4, 0.5, np.nan, np.nan, np.nan, 0.6, 0.3, 0.5],
'b':[4, 3, 5, np.nan, np.nan, np.nan, 5, 6, 5, 8, 7, 4],
'c':[20, 25, 35, 30, 10, 18, 16, 22, 26, np.nan, np.nan, np.nan]})
imp_mean = IterativeImputer(estimator=RandomForestRegressor(), random_state=0)
imp_mean.fit(df)
display(pd.DataFrame(imp_mean.transform(df)))
然后将返回以下数据帧,其中将相应推算nan值:
0 1 2
0 0.300 4.00 20.00
1 0.200 3.00 25.00
2 0.500 5.00 35.00
3 0.100 3.69 30.00
4 0.400 5.53 10.00
5 0.500 5.78 18.00
6 0.389 5.00 16.00
7 0.455 6.00 22.00
8 0.463 5.00 26.00
9 0.600 8.00 21.02
10 0.300 7.00 16.92
11 0.500 4.00 29.98