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

如何在Rust Polars中从Vec<NaiveDateTime>创建Series?

在Rust Polars中基于NaiveDateTime集合创建Series

Polars 中处理 datetime 类型时,由于需要额外的元数据(时间精度、时区),无法像整数/浮点数那样直接使用from_vec,但可以通过以下两种方式实现:

方法一:直接使用from_naive_datetimes构造(推荐)

Polars 提供了DatetimeChunked::from_naive_datetimes方法,可直接接收chrono::NaiveDateTime的集合,同时指定时间精度:

use polars::prelude::*;
use chrono::NaiveDateTime;

fn main() {
    // 示例:你的NaiveDateTime集合
    let naive_dt_vec = vec![
        NaiveDateTime::from_timestamp_opt(1620000000, 0).unwrap(),
        NaiveDateTime::from_timestamp_opt(1620003600, 0).unwrap(),
        NaiveDateTime::from_timestamp_opt(1620007200, 0).unwrap(),
    ];

    // 构造DatetimeChunked
    let dt_chunked = DatetimeChunked::from_naive_datetimes(
        "datetime_col",  // 列名
        &naive_dt_vec,   // NaiveDateTime集合
        TimeUnit::Milliseconds,  // 指定时间精度(可选:Nanoseconds/ Microseconds/ Milliseconds/ Seconds)
    );

    // 转换为Series
    let dt_series = dt_chunked.into_series();
}

方法二:手动转换为时间戳后构造

如果你需要更灵活地控制时间戳的精度,可以先将NaiveDateTime转换为对应精度的整数时间戳,再通过from_vec构造DatetimeChunked,最后补充元数据:

use polars::prelude::*;
use chrono::NaiveDateTime;

fn main() {
    let naive_dt_vec = vec![
        NaiveDateTime::from_timestamp_opt(1620000000, 0).unwrap(),
        NaiveDateTime::from_timestamp_opt(1620003600, 0).unwrap(),
        NaiveDateTime::from_timestamp_opt(1620007200, 0).unwrap(),
    ];

    // 将NaiveDateTime转为毫秒级时间戳(i64)
    let timestamps: Vec<i64> = naive_dt_vec
        .iter()
        .map(|dt| dt.timestamp_millis())
        .collect();

    // 构造DatetimeChunked并补充元数据
    let dt_chunked = DatetimeChunked::from_vec("datetime_col", timestamps)
        .with_time_unit(TimeUnit::Milliseconds)  // 设置时间精度
        .with_time_zone(None);  // None表示无时区(对应naive datetime)

    let dt_series = dt_chunked.into_series();
}

关键说明

  • 整数/浮点数类型仅需存储数值,因此from_vec即可直接构造;但datetime类型需要携带时间精度和时区元数据,因此需要专用构造方法。
  • 如果需要带时区的datetime,可将with_time_zone的参数替换为Some(TimeZone::new("UTC".into()).unwrap())(需启用polars-timezone特性)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 10:27:35