Python NumPy如何忽略nan值计算列表对应位置元素均值
NumPy 忽略NaN计算逐位置均值实现
NumPy自带和MATLAB mean(..., 'omitnan') 功能完全对等的API,无需手动编写过滤缺失值的逻辑。
实现步骤
首先修正原代码的细节问题:Python无内置nan常量,缺失值需使用np.nan定义,再将嵌套列表转为NumPy数组以支持按维度计算:
import numpy as np a = [1, 2, 3, 4, 5, 6] b = [np.nan, 2, 3, np.nan, 5, 6] c = [np.nan, 2, 3, 4, 5, 6] data = np.array([a, b, c])
直接调用缺失值友好的均值函数np.nanmean,指定axis=0即按列(所有列表的同位置元素)计算统计值:
position_mean = np.nanmean(data, axis=0)
运行得到结果[1. 2. 3. 4. 5. 6.],计算逻辑完全符合要求:
- 索引0位置有效数值仅为1,均值为1
- 索引3位置有效数值为4、4,均值为4
- 其余位置三个值均为有效数值,计算结果和普通均值一致
其他缺失值友好的统计API
NumPy提供了全系列自动跳过NaN的统计函数,覆盖常见计算需求:
- 逐位置非NaN求和:
np.nansum(data, axis=0) - 逐位置非NaN标准差:
np.nanstd(data, axis=0) - 逐位置非NaN最大值:
np.nanmax(data, axis=0) - 逐位置非NaN最小值:
np.nanmin(data, axis=0)
直接使用
np.mean无法得到正确结果的原因:普通统计函数只要在计算范围内检测到NaN,就会直接返回NaN,不会自动过滤缺失值。
内容的提问来源于stack exchange,提问作者Natasha
相关产品推荐
相关产品推荐

