【问题标题】:How to prevent Scikit-Learn Imputer from removing NaN rows?如何防止 Scikit-Learn Imputer 删除 NaN 行?
【发布时间】:2021-07-14 10:22:12
【问题描述】:

我的一个项目是使用 scikit-learn imputer 来处理 NaN 值,但是,它似乎删除了完全由 NaN 组成的行,如下面的 sn-p 所示:

tmp = [[math.nan, 3.0],[math.nan, 5.0],[math.nan, math.nan]]

imp = SimpleImputer(missing_values=np.nan, strategy='mean')
imp_tmp = imp.fit_transform(np.asarray(tmp, dtype=np.float_))

print(np.asarray(tmp, dtype=np.float_))
print(np.asarray(imp_tmp, dtype=np.float_))

assert len(np.asarray(tmp, dtype=np.float_)[0]) == len(np.asarray(imp_tmp, dtype=np.float_)[0])

尤其是断言失败。有谁知道这种行为是否记录在案以及如何预防?我在文档中找不到有关删除 NaN 行的 imputer 的任何信息:Simple Imputer

【问题讨论】:

    标签: python numpy scikit-learn imputation


    【解决方案1】:

    documentation 中所述,仅包含缺失值的列将被丢弃,除非strategy='constant'

    如果策略不是“常量”,则在变换时丢弃仅包含适合缺失值的列。

    这意味着在您的情况下,第一列被丢弃,而您只剩下第二列,其中最后一行中的缺失值被前两行中非缺失值的平均值正确替换:

    import math
    import numpy as np
    from sklearn.impute import SimpleImputer
    
    tmp = [[math.nan, 3.0],[math.nan, 5.0],[math.nan, math.nan]]
    print(np.asarray(tmp, dtype=np.float_))
    # [[nan  3.]
    #  [nan  5.]
    #  [nan nan]]
    
    print(np.asarray(tmp, dtype=np.float_).shape)
    # (3, 2)
    
    imp = SimpleImputer(missing_values=np.nan, strategy='mean')
    imp_tmp = imp.fit_transform(np.asarray(tmp, dtype=np.float_))
    print(np.asarray(imp_tmp, dtype=np.float_))
    # [[3.]
    #  [5.]
    #  [4.]]
    
    print(np.asarray(imp_tmp, dtype=np.float_).shape)
    # (3, 1)
    

    【讨论】:

      猜你喜欢
      • 2016-12-18
      • 2020-07-01
      • 1970-01-01
      • 2019-12-02
      • 2018-05-03
      • 2018-11-21
      • 2020-06-09
      • 2017-11-27
      • 2018-02-19
      相关资源
      最近更新 更多