【问题标题】:Dropping columns with high missing values删除具有高缺失值的列
【发布时间】:2020-05-09 23:18:36
【问题描述】:

我有一种情况,我需要删除大量缺失值较高的数据框列。我创建了一个新的数据框,它为我提供了原始数据集中的缺失值和缺失值的比率。

我的原始数据集 - data_merge2 如下所示:

A     B      C      D
123   ABC    X      Y
123   ABC    X      Y
NaN   ABC    NaN   NaN
123   ABC    NaN   NaN
245   ABC    NaN   NaN
345   ABC    NaN   NaN

计数数据集看起来像这样,它给了我缺失的计数和比率:

     missing_count   missing_ratio
  C    4               0.10
  D    4               0.66

我用来创建计数数据集的代码如下所示:

#Only check those columns where there are missing values as we have got a lot of columns
new_df = (data_merge2.isna()
        .sum()
        .to_frame('missing_count')
        .assign(missing_ratio = lambda x: x['missing_count']/len(data_merge2)*100)
        .loc[data_merge2.isna().any()] )
print(new_df)

现在我想从原始数据框中删除缺失率 >50% 的列 我应该如何做到这一点?

【问题讨论】:

    标签: python-3.x pandas missing-data


    【解决方案1】:

    用途:

    data_merge2.loc[:,data_merge2.count().div(len(data_merge2)).ge(0.5)]
    #Alternative
    #df[df.columns[df.count().mul(2).gt(len(df))]]
    

    DataFrame.drop 使用new_df DataFrame

    data_merge2.drop(columns = new_df.index[new_df['missing_ratio'].gt(50)])
    

    输出

           A    B
    0  123.0  ABC
    1  123.0  ABC
    2    NaN  ABC
    3  123.0  ABC
    4  245.0  ABC
    5  345.0  ABC
    

    【讨论】:

      【解决方案2】:

      使用queryXOR 添加另一种方式:

      data_merge2[data_merge2.columns ^ new_df.query('missing_ratio>50').index]
      

      或熊猫方式使用Index.difference

      data_merge2[data_merge2.columns.difference(new_df.query('missing_ratio>50').index)]
      

             A    B
      0  123.0  ABC
      1  123.0  ABC
      2    NaN  ABC
      3  123.0  ABC
      4  245.0  ABC
      5  345.0  ABC
      

      【讨论】:

        猜你喜欢
        • 2021-02-10
        • 2018-10-02
        • 1970-01-01
        • 1970-01-01
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多