如何计算含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
相关产品推荐
相关产品推荐

