Pandas如何基于筛选的列索引用各列中位数fillna填充缺失值
基于列筛选结果的中位数填充实现方案
错误原因
- 对筛选得到的Index类型列索引直接调用
median()会触发如下报错:
index doesnt have median
原因是pandas索引对象未实现中位数计算方法,本身不支持该统计操作。
- 去掉
.index属性后得到的是存储各列缺失值占比的Series,此时计算得到的中位数是缺失占比值序列的统计结果,和原始DataFrame的列数据无关,无法满足按列自身中位数填充的要求。
正确实现代码
完整流程如下:
# 计算全表各列缺失值占比 null_ratio = data.isnull().sum() * 100 / len(data) # 筛选缺失值占比在10%~40%区间的目标列 target_cols = null_ratio[(null_ratio >= 10.0) & (null_ratio <= 40.0)].index # 对目标列用各列自身中位数填充缺失值 data[target_cols] = data[target_cols].fillna(data[target_cols].median())
逻辑说明
- 代码中
data[target_cols].median()会返回以目标列名为索引、各列中位数为值的Series,传入fillna后pandas会自动按列名匹配填充值,确保每列缺失值填入的是本列的中位数,不会出现值错配。 - 该操作仅修改筛选出的目标列,其余列的数值、缺失状态都不会被改动。
- pandas的
median()方法默认会自动跳过列内的缺失值计算统计结果,不需要额外预处理空值。
内容的提问来源于stack exchange,提问作者captmorgan
相关产品推荐
相关产品推荐

