Polars中列选择方式及with_columns调用方式的性能差异问询
Polars 性能疑问解答
1. pl.col() 和 DataFrame 索引列的性能差异
有明显差异,pl.col() 方式性能更优,原因如下:
- Polars 的核心优化逻辑围绕表达式(Expression)展开,
pl.col()是原生表达式API,能完全融入Polars的查询优化器(比如谓词下推、列裁剪等),尤其是在**惰性模式(LazyFrame)**下,不会提前触发计算,所有操作会被整合成一个高效的查询计划后再执行。 - 直接用
df["netsales"]这种索引方式,本质是先从DataFrame中提取列对象再运算,在eager模式下会额外产生数据拷贝;如果是惰性模式,这种写法会强制触发部分 eager 计算,打断整个惰性优化链,导致性能下降。
大数据量场景下优先用 pl.col(),不仅性能好,代码风格也更符合Polars的最佳实践。
2. 一次性 vs 多次调用 with_columns 的性能差异
一次性调用性能更好,原因很直接:
- 在eager模式下,每次调用
with_columns都会遍历一次整个数据集,计算并添加新列;一次性调用的话,只需要遍历一次数据,就能完成所有新列的计算,减少了IO和遍历开销,数据量越大差异越明显。 - 即使是惰性模式,一次性构建的查询计划更简洁,Polars的优化器能更高效地合并操作,避免不必要的中间步骤。
简单说:能一次加完的列就别分多次,省得重复跑数据。
内容的提问来源于stack exchange,提问作者Akshay
相关产品推荐
相关产品推荐

