全网整合营销服务商

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

免费咨询热线: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  # 聚合函数 


相关文章: 建站之星免费版是否永久可用?  建站主机选购指南:核心配置优化与品牌推荐方案  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  C#怎么使用委托和事件 C# delegate与event编程方法  如何配置WinSCP新建站点的密钥验证步骤?  如何快速登录WAP自助建站平台?  家庭服务器如何搭建个人网站?  已有域名和空间,如何快速搭建网站?  教学论文网站制作软件有哪些,写论文用什么软件 ?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  建站之星好吗?新手能否轻松上手建站?  建站主机空间推荐 高性价比配置与快速部署方案解析  已有域名如何免费搭建网站?  制作农业网站的软件,比较好的农业网站推荐一下?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  微信h5制作网站有哪些,免费微信H5页面制作工具?  Python多线程使用规范_线程安全解析【教程】  如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  零基础网站服务器架设实战:轻量应用与域名解析配置指南  如何在阿里云通过域名搭建网站?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  如何通过NAT技术实现内网高效建站?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  制作网站怎么制作,*游戏网站怎么搭建?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  已有域名如何快速搭建专属网站?  学校建站服务器如何选型才能满足性能需求?  C++中引用和指针有什么区别?(代码说明)  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何快速生成专业多端适配建站电话?  如何快速搭建高效WAP手机网站?  制作网站外包平台,自动化接单网站有哪些?  如何选择CMS系统实现快速建站与SEO优化?  PHP 500报错的快速解决方法  建站之星后台管理系统如何操作?  兔展官网 在线制作,怎样制作微信请帖?  广州营销型建站服务商推荐:技术优势与SEO优化解析  如何在服务器上配置二级域名建站?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  相册网站制作软件,图片上的网址怎么复制?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  青岛网站建设如何选择本地服务器?  长沙做网站要多少钱,长沙国安网络怎么样?  如何正确选择百度移动适配建站域名?  建站之星展会模板:智能建站与自助搭建高效解决方案  高防服务器租用指南:配置选择与快速部署攻略  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成 

您的项目需求

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