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

Polars中如何筛选datetime列大于指定值且保留Null值?

解决Polars筛选Datetime列时保留Null值的问题

错误原因

你遇到的InvalidOperationError是运算符优先级导致的:>=的优先级高于|,代码会先尝试对datetime(2023, 8, 31)和pl.col("end_date").is_null()执行按位或操作,而Datetime类型与布尔类型不支持该操作,因此报错。

正确解决方法

以下三种方式都可以实现筛选需求(保留end_date大于等于指定日期或为Null的行):

方法1:给条件添加括号,明确运算顺序

通过括号强制先计算两个布尔条件,再执行逻辑或:

from datetime import datetime
import polars as pl

df.filter( (pl.col("end_date") >= datetime(2023, 8, 31)) | pl.col("end_date").is_null() )

方法2:使用Polars内置的or_()方法

直接调用布尔系列的or_()方法组合条件,彻底避免优先级问题:

df.filter( pl.col("end_date").ge(datetime(2023, 8, 31)).or_(pl.col("end_date").is_null()) )

方法3:使用pl.any_horizontal组合多条件

适合需要同时判断多个布尔条件的场景,可读性更强:

df.filter( pl.any_horizontal(
    pl.col("end_date") >= datetime(2023, 8, 31),
    pl.col("end_date").is_null()
) )

效果验证

执行上述任意代码后,DataFrame会保留所有end_date满足>=2023-08-31的行,以及end_date为Null的行,完全符合筛选需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:56:05