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

Polars中如何对日期列执行加1年的运算操作

如何在Polars中为日期列增加1年

直接使用Polars日期时间命名空间内置的dt.offset_by()方法即可,不需要手动拼接年月日,也不需要写多分支判断,该方法原生支持各类日期间隔偏移,自动处理闰年、月末等边界场景,不会触发日期越界报错。

最简实现代码如下:

import polars as pl

# 构造示例数据
df = pl.DataFrame({
    "date": ["2020-02-29", "2023-01-15", "2024-12-31", None]
}).with_columns(pl.col("date").str.to_date())

# 为日期列统一加1年
df = df.with_columns(
    pl.col("date").dt.offset_by("1y").alias("date_add_1y")
)

相关问题说明

  • 手动拼接pl.date(col.year()+1, col.month(), col.day())报错的原因:遇到闰年2月29日这类特殊日期时,下一年不存在对应月日,会直接触发底层chrono库的日期越界panic,和你贴出的报错信息完全匹配。你写的逐月份判断逻辑不仅代码冗余,同样无法处理月末、闰年的边界情况,比如1月31日偏移1个月到2月时,不存在31日就会触发同类报错。
  • map/apply实现失败的原因:这两个方法是按行调用Python自定义函数,性能比Polars原生表达式低1~2个数量级,且类型推导极易出错,官方本身就不推荐用这两个方法做常规列运算。
  • 关于pl.date()支持传入整数的疑问:文档标注参数仅接受str或Expr类型,是因为传入整数时Polars会自动将其包装为字面量表达式pl.lit(整数),属于内置的语法糖,不是参数类型不符合预期。

其他偏移场景扩展

dt.offset_by()支持灵活的间隔参数,可覆盖绝大多数日期偏移需求,默认会自动将无效日期对齐到对应月份的最后一个有效日:

  • 偏移1年零3个月:pl.col("date").dt.offset_by("1y3mo")
  • 偏移-6个月(即往前推6个月):pl.col("date").dt.offset_by("-6mo")
  • 偏移1年零10天:pl.col("date").dt.offset_by("1y10d")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:27:13