You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含NaN和数组的Pandas DataFrame行均值计算问题

解决方案:逐行排除NaN计算均值数组

首先复现问题场景:

import pandas as pd
import numpy as np
df = pd.DataFrame({'x' : [np.NaN, np.array([0,2])], 'y' : [np.array([3,2]),np.NaN], 'z' : [np.array([4,5]),np.NaN], 't' : [np.array([3,4]),np.array([4,5])]})

直接调用df.mean(axis=1)会返回全NaN,原因是pandas顶层mean方法无法处理行内混合NaN与数组的类型;而df.sum(axis=1)能正常工作,是因为sum逻辑会自动跳过NaN,对数组执行逐元素相加。

以下是两种更简洁的解决方案:

方法1:使用apply逐行处理

这是列表推导的简洁替代,利用Series的mean方法自动跳过NaN并计算数组逐元素均值:

result = df.apply(lambda row: row.mean(), axis=1)

输出结果:

0    [3.3333333333333335, 3.6666666666666665]
1                                      [2.0, 3.5]
dtype: object

方法2:向量化计算(性能更优)

结合sum和非NaN元素计数实现,避免逐行循环开销,适合大数据集:

# 计算每行非NaN元素的数量
non_nan_count = df.notna().sum(axis=1)
# 用逐行总和除以计数得到均值数组
result = df.sum(axis=1) / non_nan_count

此方法结果与方法1完全一致,但执行效率更高,因为sum和notna都是pandas的向量化操作。


内容的提问来源于stack exchange,提问作者user1627466

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 20:17:16