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

我的原始数据集 - 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% 的列
我应该如何实现这一目标?

最佳答案

用:

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

关于python-3.x - 删除缺失值高的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59882727/

10-13 05:38