本文要点
要判断“该选哪个”,可以先做一次对照:把100去掉,重新算两个值
如果列表是空的,两个函数都不会返回数值
回到标题的问题:mean和median怎么选

本文目录
先看一组自建数据:一个离群值把mean拉走了多少
假设你在练习目录里新建一个脚本,写入下面这组自建数据(不是任何真实用户或调查数据):
from statistics import mean, median
data = [8, 9, 10, 11, 12, 13, 100]
print(mean(data))
print(median(data))按Python官方statistics文档的说明,mean返回样本算术平均数,也就是数据之和除以数据点个数;median返回中位数,采用“中间两个值的平均”这一常见方法。
这组数据里,前六个值集中在8到13之间,最后一个是100。运行后你会看到:mean约为23.29,median为11。
差别来自哪里:mean把100完整地算进了总和,再除以7;median只关心排序后正中间那个值,100排在最后,不参与“中间位置”的确定。文档对mean的说明里专门写了一句:mean受离群值影响很大,不一定是数据点的典型代表;并指出median是更稳健的集中趋势度量。
本文只处理这一组自建数据,结论只描述这7个值,不能推广到别的数据集,也不能用来推断任何群体的实际情况。
把离群值拿掉再算一次:看两个数各自移动了多少
要判断“该选哪个”,可以先做一次对照:把100去掉,重新算两个值。
from statistics import mean, median
data = [8, 9, 10, 11, 12, 13, 100]
clean = [8, 9, 10, 11, 12, 13]
print(mean(data), median(data))
print(mean(clean), median(clean))自建数据下的对照结果(示例,不是实测记录):
- 含100时:mean约23.29,median为11。
- 去掉100后:mean为10.5,median为10.5。
可以这样读这张对照:去掉一个离群值,mean从约23.29掉到10.5,移动了约12.79;median从11移到10.5,只移动了0.5。
这说明在这组数据里,mean对那一个100很敏感,median几乎不动。文档对median的描述是“稳健的集中趋势度量,受离群值影响较小”,这里的结果和这句话一致。
注意:这里只做了“去掉一个值再算”的对照,不是在做异常值判定,也不说明100这个值本身是错的。它只是这组自建数据里的一个偏大值。
空数据会怎样:mean和median都触发StatisticsError
上面两组数据都非空。如果列表是空的,两个函数都不会返回数值。
按文档说明,mean在data为空时抛出StatisticsError;median在data为空时同样抛出StatisticsError。StatisticsError是ValueError的子类,用于statistics相关的异常。
可以这样验证(自建示例):
from statistics import mean, median
empty = []
try:
print(mean(empty))
except Exception as e:
print(type(e).__name__, e)
try:
print(median(empty))
except Exception as e:
print(type(e).__name__, e)预期输出里会出现StatisticsError。这里要分清两件事:一是空数据本身没有可算的集中位置;二是报错类型是StatisticsError,不是普通的TypeError或ZeroDivisionError。
本文只覆盖空列表这一种边界。文档还提到NaN值会影响median等函数,需要先剔除;这部分不在本文范围内,不展开。
选择顺序:先问数据里有没有明显偏大偏小的值
回到标题的问题:mean和median怎么选。可以按下面这个顺序判断(以下顺序是编辑整理的,不是文档给出的决策规则):
1. 先看数据里有没有明显偏离其余值的数。有,就先算median,同时把mean也算出来做对照。
2. 如果两个值差得远,说明这组数据里存在对mean影响大的值。这时用哪个,取决于你想描述什么:想描述“中间那个位置”,用median;想让每个值都参与平均,用mean,但要接受它被偏大或偏小值拉动。
3. 如果两个值很接近,说明这组数据里没有明显把mean拉走的离群值,两个都可以作为集中位置的参考。
用本文的自建数据套一遍:含100时mean约23.29、median为11,差得远,属于第2种情况;去掉100后两者都是10.5,属于第3种情况。
需要说明的限制:mean和median都只描述一组数的集中位置,不说明数据怎么分布、有没有第二个峰值、样本够不够。本文不涉及统计检验或推断,也不给任何“哪个更好”的绝对结论。
参考资料:Python官方statistics模块文档,地址见source字段。示例中的函数名、报错类型均以该文档为准。
观看知识要点视频 18 秒
18秒无旁白要点导览,文字来自已审核正文;完整步骤、条件及参考资料见下方。
参考资料
以下原始资料提供本文依据;请结合日期、适用条件和产品说明查阅。
请结合原始资料的适用条件阅读。
返回表格与数据 →