如何计算pandas DataFrame单元格中numpy数组的逐元素均值(忽略NaN)
解决DataFrame单元格中numpy数组的逐元素忽略NaN均值计算问题
我完全懂你的困扰——当DataFrame单元格里存着numpy数组,且其中包含NaN时,直接用np.nanmean(df[0])会得到完全离谱的结果,这确实挺闹心的。
问题根源
之所以出现错误结果,是因为np.nanmean处理包含数组的pandas Series时,并没有按我们预期的逻辑把数组们堆叠起来再计算逐元素均值。它会把Series当成一维元素集合来处理,而非将每个数组的对应位置元素归组计算。
可行解决方案
我们需要先把Series里的所有numpy数组堆叠成一个三维数组,再沿着存储单个数组的轴(也就是第一个轴,索引为0)计算忽略NaN的均值:
import numpy as np import pandas as pd # 构造带NaN的示例数据 a0 = np.array([[1, 2], [2, np.nan]]) a1 = np.array([[3, 2], [1, 1]]) df = pd.DataFrame([[a0], [a1]]) # 先堆叠数组,再计算逐元素nanmean stacked_arrays = np.stack(df[0].values) result = np.nanmean(stacked_arrays, axis=0) print(result)
运行后会得到符合预期的结果:
array([[ 2. , 2. ], [ 1.5, 1. ]])
额外说明
如果你的DataFrame有更多行(也就是更多numpy数组),这个方法同样适用——np.stack会把所有数组统一堆叠成三维数组,axis=0参数指定沿着原行方向计算均值,每个位置的元素都会自动忽略NaN后取平均。
内容的提问来源于stack exchange,提问作者nluckn
相关产品推荐
相关产品推荐

