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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:15:27