Polars v0.19.19中计算均值时忽略NaN的最优方法
问题解答
在Polars v0.19.19及后续版本中,要高效实现忽略NaN的均值计算,直接使用pl.Expr.mean()方法的skip_nulls=True参数即可,这是Polars原生的矢量化操作,性能远优于map_elements结合np.nanmean的方案。
示例代码
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] } ) # 使用skip_nulls=True参数忽略NaN计算均值 result = test_data.group_by("group").agg(pl.col("values").mean(skip_nulls=True)) print(result)
运行结果
shape: (2, 2) ┌───────┬────────┐ │ group ┆ values │ │ --- ┆ --- │ │ str ┆ f64 │ ╞═══════╪════════╡ │ A ┆ 1.0 │ │ B ┆ 2.5 │ └───────┴────────┘
为什么这是最优方案
- 原生矢量化操作:
mean(skip_nulls=True)是Polars内部实现的矢量化计算,避免了map_elements带来的Python循环开销,在处理大数据集时性能差距会非常明显。 - 符合Polars API设计:这是官方推荐的用法,无需依赖外部库(如NumPy),代码更简洁且维护性更好。
内容的提问来源于stack exchange,提问作者SamV
相关产品推荐
相关产品推荐

