Python中的缺失值填充

3
在对数据集应用Imputer.fit_transform()后,我失去了转换后的数据框的列名。有没有办法在不丢失列名的情况下进行插补?

欢迎来到SO。请花些时间阅读帮助页面,特别是名为“我可以在这里提什么样的问题?”和“哪些问题不应该问?”的部分。更重要的是,请阅读Stack Overflow问题清单。你可能还想了解 最小完备可验证示例(MCVE)。适当格式化你的问题,并展示一下你已经完成的工作。 - cse
只需使用原始数据框中的列来包装新返回的数据框即可。 - Vivek Kumar
是的,sklearn应该更加与pandas集成...但现在,它们彼此独立...不过Viveks的解决方案很好。 - dmeu
谢谢Vivek。这个方法可行。我一直在寻找更简单的方法。还是谢谢你。 - Gururaj Badiger
2个回答

4

正如我在评论中所说,只需使用从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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接