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