当前位置: 首页
编程语言
Python中statistics模块快速计算统计学中位数的方法与步骤

Python中statistics模块快速计算统计学中位数的方法与步骤

热心网友 时间:2026-07-14
转载

使用Python的statistics median()计算中位数需注意:不接受空列表,否则抛出StatisticsError异常;不自动过滤None或非数字值;传入大型生成器可能耗尽内存或导致性能下降。建议先过滤脏数据并转为列表,再计算,同时明确空数据时的处理策略。

其实,使用Python计算中位数时,最直接的方法就是调用statistics.median()。但这个函数有一个“小脾气”:它不接受空列表,遇到None或非数字值也不会自动跳过。很多新手初次上手时,就被它抛出的“StatisticsError: no median for empty data”给整懵了。

如何在Python中使用statistics模块快速计算统计学中的中位数?

一句话总结:statistics.median() 用起来很简单,但前提是你得把数据清洗干净,并想好空列表时的处理策略。

为什么 statistics.median() 会报错 “StatisticsError: no median for empty data”?

这个错误其实不是bug,而是刻意的设计:median() 要求输入的数据必须至少包含一个数值。它不会自作主张地返回0、None,也不会跳过空数据——而是直接抛出 StatisticsError 来提醒你:数据有问题,得由你自己决定如何处理。

看看哪些场景容易触发这个错误:

  • 从数据库或CSV文件读取一列,结果这一列全是空的
  • 对数据做了一系列过滤操作后,发现结果集为空
  • 用户压根没有输入任何数据

处理方式也不只是简单加个 try/except 就完事。你需要明确业务逻辑:遇到空数据时,到底该返回什么?是 float('nan')None,还是直接给个默认值?

另外提醒一点:statistics.median_low()statistics.median_high() 这两个兄弟函数,对待空输入的态度也是一样——拒绝得干脆利落。

传入 listtuplemap 或生成器时,行为一致吗?

基本上,只要传入的是一个可迭代对象,且里面的元素全是数字(intfloatFractionDecimal 都行),median() 都能处理。但有一个隐藏的坑:它内部会把整个可迭代对象先转成列表再排序。所以,如果你传一个巨大的生成器进去,内存可能会被瞬间吃光。

具体来看:

  • 支持的情况statistics.median([1, 2, 3])statistics.median((1.5, 2.5, 3.5))statistics.median(map(int, ['1','2','3'])) 这些都没问题
  • 不推荐的情况statistics.median(range(1000000)) —— 这会让内存直接爆炸,因为内部调用了 list()
  • 返回值类型:整数列表返回整数,浮点数列表返回浮点数。如果混合类型(比如 [1, 2.0]),Python 会按类型提升规则处理——通常结果是浮点数

如何安全地处理含 None、字符串或缺失值的数据?

这里要特别注意:statistics.median() 不会帮你做任何数据清洗。遇到 None 直接报 TypeError,遇到字符串(哪怕看起来像数字的 '1')也一样报错。

通常的做法是:

  • 先过滤,再计算:用列表推导式把脏数据清洗干净。比如 [float(x) for x in data if x is not None and str(x).strip() != '']
  • 封装一个安全函数:写一个 safe_median() 函数,里面先过滤掉非数字和 NaN,再计算中位数。如果过滤后列表为空,可以返回 float('nan') 或其他自定义值。
  • 别跟 pandas.Series.median() 搞混:pandas 的 median() 默认会跳过 NaN,但 statistics.median() 不会。两者语义完全不同,混用很容易出现逻辑偏差。

说到底,中位数计算本身并不复杂。真正考验人的,是真实数据里那些永远存在的脏、空、类型混乱的问题。关键不在于“怎么调用函数”,而在于“怎么定义有效数据”。毕竟,漏掉一次空列表检查,可能就导致整个API返回500错误。

来源:https://www.php.cn/faq/2812686.html

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
Go微服务熔断后指数退避重试机制配置

Go微服务熔断后指数退避重试机制配置

熔断器打开后应进入半开状态,再对试探请求启用指数退避重试,避免无效重试。使用gobreaker控制请求准入,backoff控制试探间隔,并启用抖动防止脉冲流量。重试和熔断需分层,重试只针对临时错误,熔断统计重试后的最终结果。

时间:2026-07-14 06:59
Java多重上界通配符无法直接写入语法的根本原因

Java多重上界通配符无法直接写入语法的根本原因

Java通配符仅支持单一上界,如?extendsA,无法直接使用多重上界。多重上界(如TextendsA&B)仅适用于泛型类型参数声明,这是Java泛型设计中的语法限制,旨在简化类型系统。若需多约束,需通过类型参数间接实现。

时间:2026-07-14 06:59
Golang微服务中集成Argo实现GitOps持续发布

Golang微服务中集成Argo实现GitOps持续发布

Go微服务与ArgoCD边界清晰,Application路径指向manifests目录而非源码。镜像更新通过CI自动提交或argocd-image-updater实现,避免写死latest标签。readinessProbe需合理配置initialDelaySeconds与periodSeconds,确保同步顺畅。

时间:2026-07-14 06:59
Java中AbstractList的快速失败机制中并发修改检查方法的执行时机

Java中AbstractList的快速失败机制中并发修改检查方法的执行时机

在AbstractList迭代器中,每次调用next()、remove()、previous()、set()或add()时,都会先执行checkForComodification,通过比较modCount与expectedModCount检测并发修改,确保操作时视图一致性,防止状态错乱。

时间:2026-07-14 06:59
Python中statistics模块快速计算统计学中位数的方法与步骤

Python中statistics模块快速计算统计学中位数的方法与步骤

使用Python的statistics median()计算中位数需注意:不接受空列表,否则抛出StatisticsError异常;不自动过滤None或非数字值;传入大型生成器可能耗尽内存或导致性能下降。建议先过滤脏数据并转为列表,再计算,同时明确空数据时的处理策略。

时间:2026-07-14 06:59
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜