python中的缺失值插补
Posted
技术标签:
【中文标题】python中的缺失值插补【英文标题】:Missing values imputation in python 【发布时间】:2018-05-21 06:01:55 【问题描述】:在我的数据集上应用Imputer.fit_transform()
后,我丢失了转换后的数据框中的列名。有没有办法在不丢失列名的情况下进行估算?
【问题讨论】:
您好,欢迎来到 SO。请花一些时间阅读帮助页面,尤其是名为"What topics can I ask about here?" 和"What types of questions should I avoid asking?" 的部分。更重要的是,请阅读Stack Overflow question checklist。您可能还想了解Minimal, Complete, and Verifiable Examples。格式化您的问题,并向我们展示您迄今为止的工作。 只需使用原始数据框中的列来覆盖新返回的列。 是的,sklearn 应该更多地与 pandas 集成......但它们彼此独立......但 Viveks 解决方案很好。 谢谢 vivek。那行得通。我一直在寻找一种更简单的方法来做到这一点。还是谢谢 【参考方案1】:正如我在问题的评论中所说,只需将数据框中的值替换(重新分配)从 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
【讨论】:
【参考方案2】:最新@Vivek 的回答:
从 Imputer 导入 sklearn.preprocessing 在 scikit-learn v0.20.4 中已弃用,现在在 v0.22.2 中已完全删除。
不使用simpleImputer(参考文档here):
from sklearn.impute import SimpleImputer
import numpy as np
imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')
【讨论】:
以上是关于python中的缺失值插补的主要内容,如果未能解决你的问题,请参考以下文章