You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Polars中表示用于全量过滤的恒等表达式?

在Polars中表示恒等过滤表达式

你可以直接使用pl.lit(True)来创建一个恒等布尔表达式,它会对所有行返回True,执行lf.filter(pl.lit(True))就会返回完整的数据集,完全匹配你的需求。

你的替代方案存在隐患

你当前使用的(pl.col("a") == 0) | (pl.col("a") != 0)有两个明显问题:

  • 依赖列a必须存在于数据集中,否则会直接报错
  • 如果列a包含null值,两个比较的结果都是null,逻辑或运算后仍为null,而Polars的filter会自动排除null对应的行,导致你丢失这些数据

示例代码

import polars as pl

lf = pl.LazyFrame({"a": [1, 2, None, 4]})

# 正确的恒等过滤,保留所有行
result = lf.filter(pl.lit(True)).collect()
print(result)
# 输出:
# shape: (4, 1)
# ┌──────┐
# │ a    │
# │ ---  │
# │ i64  │
# ╞══════╡
# │ 1    │
# │ 2    │
# │ null │
# │ 4    │
# └──────┘

# 你的方案会丢失null行
result_old = lf.filter((pl.col("a") == 0) | (pl.col("a") != 0)).collect()
print(result_old)
# 输出:
# shape: (3, 1)
# ┌─────┐
# │ a   │
# │ --- │
# │ i64 │
# ╞═════╡
# │ 1   │
# │ 2   │
# │ 4   │
# └─────┘

另外补充一点:如果只是单纯想获取完整数据集,其实不需要调用filter,直接对LazyFrame执行collect()即可;但如果是在必须传递过滤表达式的场景(比如函数参数要求传入表达式),pl.lit(True)就是最稳妥的选择。

内容的提问来源于stack exchange,提问作者user3414663

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 22:02:02