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

如何在Polars的time类型列中加减小时数?

Polars中对time类型字段加减时长的处理方法

Polars目前没有直接针对pl.time类型进行小时/分钟加减的内置API,你提到的「转为固定日期的datetime类型处理后再转回time」是目前最稳妥且推荐的方案,能自动处理跨天溢出的情况(比如01:00减2小时得到23:00)。

具体实现示例

假设你的DataFrame名为df,要给start_time减2小时,end_time加3小时:

import polars as pl

# 定义固定基准日期(任意日期都可以,不影响最终time结果)
base_date = pl.date(2024, 1, 1)

df = df.with_columns(
    # 将time转为datetime,加减时长后转回time
    start_time_adjusted=(base_date + pl.col("start_time") - pl.duration(hours=2)).dt.time(),
    end_time_adjusted=(base_date + pl.col("end_time") + pl.duration(hours=3)).dt.time()
)

另一种备选方案:基于秒数计算

如果你不想转datetime,也可以将time转为总秒数,通过数值运算后再转回time,但需要手动处理跨天的模运算:

df = df.with_columns(
    start_time_adjusted=pl.from_epoch(
        (pl.col("start_time").dt.total_seconds() - 2*3600) % 86400,
        time_unit="s"
    ).dt.time(),
    end_time_adjusted=pl.from_epoch(
        (pl.col("end_time").dt.total_seconds() + 3*3600) % 86400,
        time_unit="s"
    ).dt.time()
)

这种方法通过对86400(一天的总秒数)取模,确保秒数始终在0-86399范围内,从而得到正确的time值。

总结

两种方法都能实现需求,但转datetime的方式更直观,Polars会自动处理日期滚动,不需要手动处理模运算,代码可读性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:27:07