如何用pandas处理超5万缺失值的分类数据 众数填充是否可行
大规模缺失值场景下的分类变量众数填充效果分析
方法本身的适用前提
- 代码层面你当前写的
fillna(data[].value_counts().index[0],inplace=True)存在语法错误,运行时会直接报错,需要把方括号内替换为实际要处理的列名(比如data["user_grade"])才能正常执行。 - 当分类变量的缺失完全随机产生(比如传感器采集偶发丢包、系统传输时的随机漏记,缺失行为和样本本身的真实属性无关联),且变量的众数在非缺失样本中占比足够高(通常要求60%以上),此时用众数填充的偏差极低,是成本极低、稳定性强的常规工程处理方案。
容易引发问题的场景
- 当缺失不是随机发生时:如果缺失值本身和样本的真实分类存在强关联(比如某类消费能力的用户出于隐私原因从不填写收货地址,导致该类样本的地址字段全为缺失),此时用全局众数硬填会完全抹平缺失值本身携带的业务信息,引入系统性偏差,甚至导致后续分析结论完全偏离真实情况。
- 单变量缺失占比过高时:你提到全量数据集的缺失总量超过50000条,不能一概而论说方法是否合理,核心要看单变量的缺失率——如果某一分类变量的缺失率超过30%,哪怕缺失是随机产生的,众数填充也会扭曲该变量的真实取值分布,人为抬高众数类别的占比、压缩其他类别的样本权重,本质上就是有效信息损失。
- 分类分布极度平均时:如果变量的几个类别占比几乎持平,没有绝对占优的众数,此时选排序第一的众数填充,和随机选一个类别填充的效果没有本质区别,只会引入无意义的噪声。
降低信息损失的优化思路
- 先为缺失值单独打标记:在做填充前新增一个0/1的布尔列,标记哪些样本是原始缺失状态,再执行众数填充,就能把“缺失行为”本身的信息完整保留,不会因为填充抹平这部分内容。
- 缺失率超过50%的低重要度分类变量,直接从分析特征中剔除,比强行做填充的投入产出比更高。
- 如果后续需要做有监督建模,且样本量足够,可以用其他无缺失的特征训练轻量分类模型,对缺失值做针对性预测填充,比直接用全局众数的偏差小很多。
内容的提问来源于stack exchange,提问作者Nikita Anbattul
相关产品推荐
相关产品推荐

