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

如何在Rust Polars中基于现有日期列生成加1天的新日期列

在Rust Polars中给日期列添加延后1天的新列

推荐方案:使用Polars内置日期偏移函数

Polars针对日期类型提供了原生的偏移操作,无需手动处理元素类型,代码简洁且性能更优:

use polars::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 构造示例DataFrame
    let df = df!(
        "made_on" => &[
            date(2021, 6, 4),
            date(2021, 12, 31),
            date(2021, 12, 31),
            date(2021, 12, 30),
            date(2022, 8, 6),
            date(2022, 8, 6),
        ]
    )?;

    // 添加for_date列,值为made_on延后1天
    let df_with_for_date = df.with_column(
        col("made_on")
            .date()
            .offset(1, TimeUnit::Days)
            .alias("for_date")
    )?;

    println!("{}", df_with_for_date);
    Ok(())
}

代码说明:

  • col("made_on").date():将列表达式转换为日期类型专用的表达式,方便调用日期相关方法
  • .offset(1, TimeUnit::Days):对日期列执行偏移操作,参数分别是偏移量和时间单位
  • .alias("for_date"):为新列指定名称

手动map实现方案(适合理解类型逻辑)

如果需要手动处理每个日期元素,需注意Polars中Date类型底层存储为Date32(用i32表示从1970-01-01起的天数),代码如下:

use polars::prelude::*;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let df = df!(
        "made_on" => &[
            date(2021, 6, 4),
            date(2021, 12, 31),
            date(2021, 12, 31),
            date(2021, 12, 30),
            date(2022, 8, 6),
            date(2022, 8, 6),
        ]
    )?;

    let df_with_for_date = df.with_column(
        col("made_on")
            .map(|series| {
                // 将Series转换为Date32类型的ChunkedArray
                let date_array = series.date()?;
                // 对每个日期值加1天(处理可能的缺失值)
                let new_dates = date_array.apply(|opt_date| opt_date.map(|days_since_epoch| days_since_epoch + 1));
                // 转换回Series返回
                Ok(new_dates.into_series())
            })
            .alias("for_date")
    )?;

    println!("{}", df_with_for_date);
    Ok(())
}

代码说明:

  • series.date():将通用Series转换为ChunkedArray<Date32>,获取日期的底层存储值
  • apply方法:遍历每个元素,处理缺失值(Option<i32>),对有效日期加1天
  • 最后将处理后的ChunkedArray转换回Series,完成列的生成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:27:23