在对数据集应用
Imputer.fit_transform()
后,我失去了转换后的数据框的列名。有没有办法在不丢失列名的情况下进行插补?Imputer.fit_transform()
后,我失去了转换后的数据框的列名。有没有办法在不丢失列名的情况下进行插补?正如我在评论中所说,只需使用从Imputer返回的数据替换(重新分配)数据框中的值。
假设这是您的数据框:
import numpy as np
import pandas as pd
df = pd.DataFrame(data=[[1,2,3],
[3,4,4],
[3,5,np.nan],
[6,7,8],
[3,np.nan,1]],
columns=['A', 'B', 'C'])
当前的 df
:
A B C
0 1 2.0 3.0
1 3 4.0 4.0
2 3 5.0 NaN
3 6 7.0 8.0
4 3 NaN 1.0
如果您要将整个 df
发送到 Imputer,请使用以下代码:
df[df.columns] = Imputer().fit_transform(df)
如果您只发送一些列,请仅使用这些列来分配结果:
columns_to_impute = ['B', 'C']
df[columns_to_impute] = Imputer().fit_transform(df[columns_to_impute])
输出:
A B C
0 1.0 2.0 3.0
1 3.0 4.0 4.0
2 3.0 5.0 4.0
3 6.0 7.0 8.0
4 3.0 4.5 1.0
更新@Vivek的答案:
从scikit-learn v0.20.4开始,使用import sklearn.preprocessing from Imputer已被弃用,并在v0.22.2中完全删除。
现在使用simpleImputer(请参阅文档here):
from sklearn.impute import SimpleImputer
import numpy as np
imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')