我有一个大熊猫数据成名 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 许可协议
np.array
由.complete()
方法返回的 --- fancyimpute 对象(无论是老鼠还是 KNN)的方法作为内容提供(argument data=)
的 pandas 数据和索引与原始数据框相同。