为何用均值填充DataFrame中的NaN?填充会影响数据吗?
为何用均值替换DataFrame中的NaN值?填充后对数据有何影响?
一、选择均值填充NaN的原因
- 适配工具与模型要求:绝大多数数据分析工具、机器学习算法都无法直接处理含NaN的数据集,必须先填补缺失值才能推进后续工作,均值填充是最易上手的解决方案之一。
- 实现成本极低:计算均值是基础统计操作,代码实现非常简洁(就像你用的
df['view_duration'].fillna(mean,inplace = True)),不需要复杂逻辑,适合快速处理小规模缺失数据。 - 数据分布对称时能保留整体趋势:如果数据没有严重的极端值,均值能较好代表数据的集中水平,填充后不会大幅偏离原有数据的整体状态。
二、均值填充对数据的影响
1. 正向作用
- 快速让数据集达到可使用状态,避免因缺失值导致分析流程中断。
- 当缺失值占比不高(比如你示例里3个NaN,占比约27%)且数据分布平稳时,能在一定程度上维持数据的集中趋势,不会让基础统计结果(比如整体均值)出现偏差——你填充后的数据集均值和原数据非缺失值的均值完全一致。
2. 负面作用
- 掩盖真实数据差异:如果数据存在极端值(比如你示例中的3.112086),均值会被极端值带偏,填充后的NaN值会向这个偏移的均值靠拢,拉平了原本可能存在的数据波动,模糊了真实分布。
- 降低数据离散程度:填充后的数据集方差会比原始数据小,因为新增的填充值都是同一个均值,减少了数据的离散性,这会让后续的相关性分析、方差分析等结果出现偏差。
- 缺失值占比过高时失真严重:如果NaN占比超过30%,用均值填充会让数据过度“趋中”,完全偏离真实的数据分布,后续分析结果基本没有参考价值。
示例验证
原始数据
0 1.048242 1 1.688173 2 NaN 3 0.194162 4 0.194162 5 0.493194 6 NaN 7 0.675041 8 NaN 9 0.101743 10 3.112086
填充代码
df['view_duration'].fillna(mean,inplace = True)
填充后数据
0 1.048242 1 1.688173 2 0.938350 3 0.194162 4 0.194162 5 0.493194 6 0.938350 7 0.675041 8 0.938350 9 0.101743 10 3.112086
从示例能看到,三个NaN都被替换为了均值0.938350,虽然整体均值没变,但原本缺失位置的真实数据可能和均值有差异,这部分信息已经被掩盖了。
内容的提问来源于stack exchange,提问作者mohamed kamal
相关产品推荐
相关产品推荐

