使用Python删除数据集指定列表内缺失值占比超60%的列
问题场景
- 存在一个名为
df的pandas DataFrame对象,另有存储数值型数据列名的列表float64list - 需求为仅对
float64list范围内的列做校验,删除其中缺失值占比高于60%的列,不在该列表内的列无论缺失率多少都保留 - 现有实现是对全表所有列生效的删除逻辑,没有做列范围筛选,代码如下:
df.dropna(thresh=df.shape[0]*0.6,how='all',axis=1, inplace=True)
实现方案
不要直接对全表调用dropna,先单独筛选float64list范围内符合删除条件的列,再统一执行删除操作即可,代码如下:
# 先过滤掉float64list里实际不存在于df的列,避免列名不匹配报错 target_cols = [col for col in float64list if col in df.columns] # 筛选出目标列中 非缺失值数量不足总行数60%(即缺失率>60%)的待删除列 to_drop = [ col for col in target_cols if df[col].count() < len(df) * 0.6 ] # 执行删除 df.drop(columns=to_drop, inplace=True)
补充说明:你原有代码里的
how='all'参数含义是「整列全部为缺失值才触发删除」,和你要的「缺失率超60%即删除」的逻辑存在冲突,上述逐列统计非缺失值数量的写法可以完全规避这个参数带来的逻辑偏差,判断更准确。
内容的提问来源于stack exchange,提问作者vib
相关产品推荐
相关产品推荐

