如何使用Polars筛选指定时间段内的时间序列数据?
Polars时间序列筛选9:30至16:00(含16:00)的解决方案
核心问题修正
你之前的写法漏掉16:00记录,大概率是筛选条件中用了hour() < 16这类限制,把16点整的记录排除了。Polars提供了更直观的时间比较API,能避免这类边界错误。
最优实现方案
直接使用Polars的dt.time()提取时间部分,配合is_between()方法(指定包含两端),一步完成筛选:
import polars as pl import pandas as pd # 生成示例时间序列数据 pd_df = pd.DataFrame({ "timestamp": pd.date_range("2024-01-01 08:00", "2024-01-01 16:30", freq="15min") }) # 转换为Polars DataFrame pl_df = pl.from_pandas(pd_df) # 筛选9:30至16:00(含两端)的记录 filtered_df = pl_df.filter( pl.col("timestamp").dt.time().is_between( start=pl.time(9, 30), end=pl.time(16, 0), closed="both" # 指定包含起始和结束端点 ) ) print(filtered_df)
替代基础写法
如果不想用is_between(),直接用时间比较运算符也能达到相同效果:
filtered_df = pl_df.filter( (pl.col("timestamp").dt.time() >= pl.time(9, 30)) & (pl.col("timestamp").dt.time() <= pl.time(16, 0)) )
Polars时间处理的优势
相比拆分小时、分钟做复杂逻辑判断,直接操作时间对象的优势:
- 代码简洁易读,减少逻辑出错概率
- 天然支持时间边界的准确判断,不会遗漏16:00这类整点记录
- 若涉及时区,只需先通过
dt.convert_time_zone()统一时区,后续筛选逻辑完全不变
内容的提问来源于stack exchange,提问作者stucash
相关产品推荐
相关产品推荐

