Polars中统计列表列元素个数的更优实现方法
在Polars中高效统计列表列的元素数量
在Polars里,推荐使用list.len()表达式来统计列表列的元素数量,这是Polars原生支持的矢量化操作,比你之前用的map_elements(lambda x: len(x))高效得多——map_elements是逐行调用Python函数,会带来额外的开销,而list.len()是Polars内部优化的批量处理逻辑,在数据量较大时性能差距会非常显著。
优化后的代码示例
import polars as pl dfp = pl.DataFrame({'a': [1,2,3], 'b':[[1,2,3], [2], [5,0]]}) # 使用list.len()实现高效统计 result = dfp.with_columns(pl.col('b').list.len().alias('c')) print(result)
输出结果
shape: (3, 3) ┌─────┬───────────┬─────┐ │ a ┆ b ┆ c │ │ --- ┆ --- ┆ --- │ │ i64 ┆ list[i64] ┆ i64 │ ╞═════╪═══════════╪═════╡ │ 1 ┆ [1, 2, 3] ┆ 3 │ │ 2 ┆ [2] ┆ 1 │ │ 3 ┆ [5, 0] ┆ 2 │ └─────┴───────────┴─────┘
补充说明
Polars针对列表类型列提供了一整套list.*系列方法(比如list.sum()、list.mean()等),这些方法都是基于矢量化实现的,能充分利用Polars的性能优势。除非需要处理非常定制化的逻辑,否则应优先使用这些原生方法,避免使用map_elements这类逐元素处理的方式。
内容的提问来源于stack exchange,提问作者Quant Christo
相关产品推荐
相关产品推荐

