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

如何计算含NaN及不同列长的DataFrame全局统计量?

解决DataFrame全局统计量计算(含NaN/列长差异)

针对包含NaN或列长度不一致的DataFrame,要计算全局的min、mean、std、sum等统计量,可通过以下两种高效方法实现:

方法一:利用pandas的stack()方法

stack()会将DataFrame的列索引转为二级行索引,同时自动丢弃所有NaN值,得到仅包含有效数值的一维Series,直接调用Series的统计方法即可:

代码示例

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    'a': [4, 3, 1, 3, 2],
    'b': [7, 2, 9, 4, np.nan]
})

# 计算全局统计量
global_min = df.stack().min()       # 输出:1
global_mean = df.stack().mean()     # 输出:3.888...
global_std = df.stack().std()       # 输出:2.607...
global_sum = df.stack().sum()       # 输出:35

方法二:转为numpy数组后过滤NaN

先将DataFrame转为一维数组,过滤掉NaN值后,用numpy的统计方法计算:

代码示例

# 转为一维数组并过滤NaN
valid_values = df.to_numpy().flatten()[~np.isnan(df.to_numpy().flatten())]

# 计算统计量
global_min = valid_values.min()
global_mean = valid_values.mean()
global_std = valid_values.std()
global_sum = valid_values.sum()

说明

  • 对于列长度不一致的DataFrame,pandas会自动为短列补NaN,两种方法均能正确过滤这些补全的NaN值。
  • 两种方法均默认忽略NaN,无需额外设置参数(Series的统计方法默认skipna=True,numpy过滤后直接计算有效数值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:01:58