全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Polars GroupBy:如何高效忽略 NaN 值计算均值

在 polars 中,`mean()` 默认不忽略 nan,需显式调用 `drop_nans()` 或 `fill_nan(none)` 预处理,二者语义等价但性能表现随数据规模和分组数变化;推荐优先使用 `fill_nan(none).mean()` 以获得更优并行效率。

Polars 的聚合函数(如 pl.col("values").mean())默认将 NaN 视为有效值参与计算——一旦组内存在任意 NaN,整组均值即返回 NaN,这与 Pandas 的 nanmean 行为不一致。要实现“忽略 NaN 求均值”,最简洁、高效且符合 Polars 原生范式的方式是在聚合前清除 NaN 语义干扰,而非依赖 Python 层的 map_elements(因其破坏查询优化、无法向量化、严重拖慢性能)。

✅ 推荐方案:fill_nan(None).mean()
这是目前最优实践。fill_nan(None) 将 NaN 替换为 null(Polars 的缺失值原生表示),而 mean() 对 null 值天然跳过(无需额外配置):

import polars as pl
import numpy as np

test_data = pl.DataFrame({
    "group": ["A", "A", "B", "B"],
    "values": [1.0, np.nan, 2.0, 3.0]
})

result = test_data.group_by("group").agg(
    pl.col("values").fill_nan(None).mean().alias("mean_ignore_nan")
)
print(result)

输出:

shape: (2, 2)
┌───────┬────────────────┐
│ group ┆ mean_ignore_nan │
│ ---   ┆ ---             │
│ str   ┆ f64             │
╞═══════╪═════════════════╡
│ A     ┆ 1.0             │
│ B     ┆ 2.5             │
└───────┴─────────────────┘

⚠️ 替代方案:drop_nans().mean() 同样正确,但实测在大数据量(如亿级行)下略慢于 fill_nan(None)。其原理是物理删除 NaN 元素后再计算,而 fill_nan(None) 仅做标记替换,更利于底层内存布局优化与多线程调度。

? 性能关键洞察:

  • 1 亿行、20% NaN、少量分组 场景下,fill_nan(None).mean() 比 drop_nans().mean() 快约 1.6×(737ms vs 1210ms);
  • 但当分组数急剧增加(如数千组),drop_nans() 的并行粒度优势可能反超——建议在实际业务数据上用 %timeit 验证;
  • 二者结果完全一致,且均远快于 map_elements(lambda x: np.nanmean(x.to_numpy()))(后者在亿级数据上可能慢 10–100 倍)。

? 注意事项:

  • fill_nan(None) 仅影响当前表达式链,不修改原始列;
  • 若列中同时存在 null 和 NaN,fill_nan(None) 会将 NaN 转为 null,之后 mean() 自动统一忽略所有 null;
  • 确保数值列类型为浮点型(如 f64),整型列无法存储 NaN,需先 cast(pl.Float64);
  • 使用 maintain_order=True 可保留分组输出顺序,便于调试或下游确定性消费。

总之,摒弃 map_elements,拥抱 fill_nan(None).mean() —— 它是 Polars 原生、可优化、高性能且语义清晰的标准解法。


# python  # 大数据  # ai  # 聚合函数 


相关文章: 网站制作服务平台,有什么网站可以发布本地服务信息?  一键网站制作软件,义乌购一件代发流程?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  微信推文制作网站有哪些,怎么做微信推文,急?  如何破解联通资金短缺导致的基站建设难题?  企业微网站怎么做,公司网站和公众号有什么区别?  模具网站制作流程,如何找模具客户?  ,怎么在广州志愿者网站注册?  制作表格网站有哪些,线上表格怎么弄?  如何通过服务器快速搭建网站?完整步骤解析  linux top下的 minerd 木马清除方法  如何在IIS7上新建站点并设置安全权限?  如何确保西部建站助手FTP传输的安全性?  如何访问已购建站主机并解决登录问题?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  动图在线制作网站有哪些,滑动动图图集怎么做?  大连网站制作公司哪家好一点,大连买房网站哪个好?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  如何在万网自助建站中设置域名及备案?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  开源网站制作软件,开源网站什么意思?  ,购物网站怎么盈利呢?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  深圳网站制作培训,深圳哪些招聘网站比较好?  移民网站制作流程,怎么看加拿大移民官网?  如何高效生成建站之星成品网站源码?  如何用PHP快速搭建CMS系统?  如何在Golang中指定模块版本_使用go.mod控制版本号  网站制作费用多少钱,一个网站的运营,需要哪些费用?  建站之星如何一键生成手机站?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  已有域名如何免费搭建网站?  建站主机选哪家性价比最高?  如何通过NAT技术实现内网高效建站?  威客平台建站流程解析:高效搭建教程与设计优化方案  实例解析Array和String方法  如何用景安虚拟主机手机版绑定域名建站?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  建站主机是否等同于虚拟主机?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  大连网站设计制作招聘信息,大连投诉网站有哪些?  如何挑选高效建站主机与优质域名?  如何快速搭建自助建站会员专属系统?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  Thinkphp 中 distinct 的用法解析  Python文件管理规范_工程实践说明【指导】  建站之星展会模板:智能建站与自助搭建高效解决方案  建站之星CMS五站合一模板配置与SEO优化指南  建站主机与服务器功能差异如何区分? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。