如何用Polars纯表达式逻辑实现指定字符串处理逻辑?
用纯Polars表达式替代Python Lambda优化字符串处理速度
当然可以用纯Polars表达式实现,完全避免Python逻辑带来的性能损耗,代码如下:
替代方案代码
df = df.with_columns( pl.when(pl.col("code").str.lengths() <= 2) .then(pl.col("code").str.concat("88")) .otherwise(pl.col("code")) .alias("code") )
为什么更快?
- 原写法里的
apply(lambda...)会触发Python层面的逐行处理,涉及频繁的Rust-Python上下文切换,还受GIL限制,数据量越大速度越慢。 - 纯Polars表达式是在Rust runtime中执行的向量化操作,能充分利用Polars的底层性能优化,处理大规模数据集时效率提升非常明显。
额外说明
如果code列存在空值,可在长度判断里直接处理:
pl.col("code").str.lengths().fill_null(0) <= 2
内容的提问来源于stack exchange,提问作者Hakase
相关产品推荐
相关产品推荐

