首页 > 解决方案 > 如何填写数据集中缺少 20% 的列?

问题描述

数据集中有一列缺失 54%。17031 此列中缺少数据。我没有删除它,因为这个专栏对我很重要。我用knn填充它。但是因为它的邻居也是nan值,所以有些行还是用nan填充的。我改变了邻居的数量 3,我尝试了 4 和 5,但结果是一样的。12116行仍然是nan。你建议我擦柱子,你还有其他推荐的方法吗?

from sklearn.impute import KNNImputer
df_n = df[["Credit_Score","Annual_Income"]]
var_names = df_n.columns
n_df = np.array(df_n)

imputer = KNNImputer(n_neighbors=3)
new_data = imputer.fit_transform(n_df)
df2=pd.DataFrame(new_data, columns=var_names)
for s in ["Credit_Score","Annual_Income"]:
    df[[s]] = df2[s]

标签: pythonpandasscikit-learn

解决方案


您可以使用 sklearn 的 SimpleImputer ( link ),它可以使用与列相关的均值、中值或其他常量来填充缺失值。这是一种比 KNN 更简单的插补策略,但它确实确保插补后没有 nan。


推荐阅读