同事做完一份学生成绩表,用 mean() 一算平均分95,他觉得很正常,我一看原始数据里缺考的都填了0分,直接拉低了一截。
mean() 到底算什么
它就是把一堆数加起来再除以个数,属于最普通的算术平均。Pandas 里是 series.mean(),NumPy 里是 np.mean(),Excel 里是 AVERAGE(),名字不同,逻辑一样。
import numpy as np; print(np.mean([1, 2, 3, 4])) # 输出 2.5空值它会自动跳过
Pandas 和 NumPy 的 mean() 默认跳过 NaN,不参与计算也不占个数。这一点跟很多人直觉不一样,以为有 NaN 结果就成了 NaN。想让它变 NaN 得加参数 skipna=False。
import pandas as pd; s = pd.Series([1, 2, None]); print(s.mean()) # 1.5,None 被跳过;print(s.mean(skipna=False)) # nan中位数和平均分到底看哪个
- 看平均:想算总水平、总成本、总流量,用 mean()
- 看分布:数据里有一两个极端值,比如某人工资10万拖高全组,就该看 median()
- 两者差得多:说明数据偏斜严重,平均分已经不能代表大多数人
判断很简单,把 mean 和 median 都打出来,差得离谱就说明有离群点,先处理再汇报,别拿一个数当结论。
维度选错会算歪
二维数组最容易出错,axis=0 是沿着行方向压缩,得到每列平均;axis=1 是每行平均。写反了结果整个不对劲,还很难看出来。
一句话取舍:数据干净、想快速摸个底,mean() 够用;有一点脏数据、还在意代表性,就顺手把中位数也看一眼。