statistics.median()要求输入为非空可迭代对象,传单个数字或none会报错;stdev()计算样本标准差(n-1),pstdev()计算总体标准差(n);二者均不处理nan、字符串等非法值,且性能低于numpy。

用 statistics.median() 计算中位数,注意输入必须是可迭代对象
直接传入列表、元组或 range 都可以,但不能传单个数字或 None。空序列会抛出 StatisticsError,这点容易被忽略——比如从 API 拿到空响应后没校验就直接喂给 median(),程序就崩了。
常见错误现象:TypeError: 'int' object is not iterable,说明你传了个纯数字(比如 median(5)),得改成 median([5])。
使用场景:清洗数据后快速看中心趋势,比 numpy.median() 轻量,不依赖额外包。
- 支持奇数/偶数长度序列,自动取中间值或中间两数均值
- 不修改原数据,也不做类型转换——如果传入字符串数字(如
['1', '2']),会报TypeError - 对浮点精度无特殊处理,
median([1.1, 1.3, 1.5])返回1.3,不是近似值
用 statistics.stdev() 和 statistics.pstdev() 区分样本与总体标准差
这是最容易混淆的点:默认的 stdev() 是「样本标准差」,分母为 n-1;而 pstdev() 是「总体标准差」,分母为 n。选错会导致结果偏差约 5–10%,尤其在小数据集上明显。
常见错误现象:用 stdev() 算考试全班成绩(即总体),却误当成样本处理,结果偏大。
使用场景:stdev() 适合从大总体抽样分析(如用户行为日志抽样);pstdev() 适合已知全部数据(如某次实验全部 12 次测量值)。
python-docx Skill功能概述python-docx Skill是一项面向实际任务的技能,主要用于本Skill提供使用python-docx生成专业Word文档的标准方法和最佳实践;生成安全服务方案文档;核心要点生成技术架构设计文档;生成任何需要专业排版的Word文档;核心库 : python-docx;使用与执行辅助库 : docx.shared , docx.enum , docx.oxml.ns;标准代码模板;1. 文档初始化;2. 字体设置(必须!它将相关步骤、工具调用和结果整理方式集
- 两者都要求至少两个元素,传单元素会报
StatisticsError: variance requires at least two data points - 输入含非数字(如
None、字符串)时立刻报TypeError,不会跳过或尝试转换 - 不处理 NaN 或无穷大,
float('nan')传入后返回nan,且不报错——这可能掩盖脏数据
和 numpy 对比:什么时候不该用 statistics
如果你已经用了 numpy,再为中位数/标准差单独切到 statistics 反而增加维护成本。而且 statistics 不支持数组广播、缺失值标记(如 np.nan)、多维降维计算。
性能差异在千级以内数据几乎无感,但万级以上明显:用 statistics.stdev(list_data) 比 np.std(list_data, ddof=1) 慢 3–5 倍,因为前者纯 Python 实现,后者底层 C 优化。
-
statistics无法计算行/列维度的标准差,np.std(data, axis=0)这种操作它根本不认识 - 没有
nanmean类似物,遇到nan就失效,而numpy可设nan_policy='omit' - 不支持 decimal 或 fractions 类型的精确运算,
statistics.median([Fraction(1,2), Fraction(3,4)])会成功,但stdev()对 Fraction 报TypeError
实操建议:加一层薄包装防崩
别裸调 statistics 函数。真实项目里数据来源不可控,建议封装一层做基础校验:
def safe_median(data):
if not data:
return None
if not hasattr(data, '__iter__') or isinstance(data, (str, bytes)):
data = [data]
try:
return statistics.median(data)
except (TypeError, statistics.StatisticsError):
return None
同理,stdev() 前先 if len(data) ,避免运行时报错打断流程。这种小检查花不了几毫秒,但能省去查日志定位 <code>StatisticsError 的时间。
真正麻烦的从来不是函数怎么写,而是数据进来的那一刻——有没有 None、空字符串、嵌套结构、单位混杂。这些,statistics 一个都不管。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










