首页 > 解决方案 > 在 Python 中输入缺失值

问题描述

我想使用 Scikit-Learn 在我的数据框中估算几列SimpleImputer。我试过这样做,但没有运气。我应该如何修改我的代码?a, b,e是我要估算​​的数据框中的列。

我的数据框:

    a   b   c   d      e
    NA  39  cat gray   20
    5   NA  dog brown  NA
    7   53  cat tan    33
    NA  NA  cat black  41
    4   24  dog tan    NA

我的代码:

from sklearn.impute import SimpleImputer

miss_mean_imputer = SimpleImputer(missing_values='NaN', strategy='mean', axis=0)

miss_mean_imputer = miss_mean_imputer.fit(df["a", "b", "e"])

imputed_df = miss_mean_imputer.transform(df.values)

print(imputed_df)

标签: pythonscikit-learn

解决方案


您应该在实例化 imputer 时替换missing_values='NaN'missing_values=np.nan,并且还应该确保 imputer 用于转换已安装的相同数据,请参见下面的代码。

import pandas as pd
import numpy as np
from sklearn.impute import SimpleImputer

df = pd.DataFrame({
 'a': [np.nan, 5.0, 7.0, np.nan, 4.0],
 'b': [39.0, np.nan, 53.0, np.nan, 24.0],
 'c': ['cat', 'dog', 'cat', 'cat', 'dog'],
 'd': ['gray', 'brown', 'tan', 'black', 'tan'],
 'e': [20.0, np.nan, 33.0, 41.0, np.nan]
})

imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer = imputer.fit(df[['a', 'b', 'e']])

imputed_df = df.copy()
imputed_df[['a', 'b', 'e']] = imputer.transform(df[['a', 'b', 'e']])

print(imputed_df)
#           a          b    c      d          e
# 0  5.333333  39.000000  cat   gray  20.000000
# 1  5.000000  38.666667  dog  brown  31.333333
# 2  7.000000  53.000000  cat    tan  33.000000
# 3  5.333333  38.666667  cat  black  41.000000
# 4  4.000000  24.000000  dog    tan  31.333333

推荐阅读