使用 fancyimpute 和 pandas 进行数据插补

新手上路,请多包涵

我有一个大熊猫数据成名 df 。它有很多缺失。删除 row/or col-wise 不是一种选择。估算中位数、均值或最频繁的值也不是一个选项(因此估算 pandas 和/或 scikit 不幸的是没有做到这一点)。

我遇到了一个看起来很简洁的包,叫做 fancyimpute (你可以在 这里 找到它)。但是我有一些问题。

这是我所做的:

 #the neccesary imports
import pandas as pd
import numpy as np
from fancyimpute import KNN

# df is my data frame with the missings. I keep only floats
df_numeric = = df.select_dtypes(include=[np.float])

# I now run fancyimpute KNN,
# it returns a np.array which I store as a pandas dataframe
df_filled = pd.DataFrame(KNN(3).complete(df_numeric))

但是, df_filled 是一个单一的矢量,而不是填充的数据框。我如何通过插补获得数据框?

更新

我意识到, fancyimpute 需要一个 numpay array 。因此,我使用 as_matrix()df_numeric 转换为数组。

 # df is my data frame with the missings. I keep only floats
df_numeric = df.select_dtypes(include=[np.float]).as_matrix()

# I now run fancyimpute KNN,
# it returns a np.array which I store as a pandas dataframe
df_filled = pd.DataFrame(KNN(3).complete(df_numeric))

输出是一个缺少列标签的数据框。有什么方法可以检索标签?

原文由 Rachel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 961
2 个回答
df=pd.DataFrame(data=mice.complete(d), columns=d.columns, index=d.index)

np.array.complete() 方法返回的 --- fancyimpute 对象(无论是老鼠还是 KNN)的方法作为内容提供 (argument data=) 的 pandas 数据和索引与原始数据框相同。

原文由 NicolasWoloszko 发布,翻译遵循 CC BY-SA 3.0 许可协议

在您的代码后添加以下行:

 df_filled.columns = df_numeric.columns
df_filled.index = df_numeric.index

原文由 Miriam Farber 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题