如何编写匹配所有内容(含空值)的Polars过滤表达式pl.Expr?
在Polars过滤场景中匹配所有内容(含空值)的表达式方案
在Polars的过滤场景中,若需要一个能匹配所有行(包括含空值的行)的pl.Expr,最直接简洁的方案是使用pl.lit(True)。
核心逻辑
pl.lit(True)会生成一个全为True的布尔表达式列,它不依赖任何输入数据的取值——无论原数据中是否存在空值(null),该表达式的结果始终为True,过滤时会完整保留所有行。
常见误区规避
- 不要用
pl.col("*"):这是选择所有列的表达式,并非布尔过滤条件,无法用于filter()方法。 - 无需使用复杂聚合表达式(如
pl.any_horizontal(pl.all())):这类写法冗余且性能不如pl.lit(True)直接高效。
场景示例(类型提示与辅助函数)
import polars as pl from typing import Callable # 符合类型提示要求、返回pl.Expr的辅助函数 def get_full_match_expr() -> pl.Expr: return pl.lit(True) # 测试使用 sample_df = pl.DataFrame({ "id": [1, 2, None], "value": ["foo", None, "bar"] }) # 过滤后保留所有行(含空值行) result_df = sample_df.filter(get_full_match_expr())
内容的提问来源于stack exchange,提问作者Gregg Lind
相关产品推荐
相关产品推荐

