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

如何从日期字符串在Polars中创建date_range?解决time_unit错误

Polars实现类似Pandas的日期范围生成

问题场景

在Pandas中,已知日期字符串和范围,可通过以下代码生成日期范围数组:

date = "2023-01-12"

dates = pd.date_range(pd.to_datetime(date) - pd.Timedelta(days=3), periods=3, freq="D").to_list()

尝试在Polars中实现相同逻辑,初始编写的代码如下:

pl.date_range(pl.Datetime(date).dt.offset_by("-3d"), pl.Datetime(date), interval="1d")

运行时触发错误:

ValueError: invalid `time_unit`

疑问:Polars是否支持直接使用单个变量实现该功能,还是需要将日期转换为Series?

解决方案

Polars的pl.date_range()要求起始、结束参数为标量日期值或Series,而你直接用pl.Datetime(date)生成的是表达式而非标量,这就是报错的核心原因。

以下两种方式可以解决问题:

方式1:先转成标量Datetime对象(适合单独变量场景)

先将日期字符串解析为Polars的标量Datetime,计算偏移后传入date_range:

import polars as pl

date = "2023-01-12"
start_date = pl.to_datetime(date) - pl.duration(days=3)
end_date = pl.to_datetime(date)

# 生成日期范围,指定periods=3和原Pandas逻辑对齐
dates = pl.date_range(start_date, end_date, interval="1d", periods=3).to_list()

方式2:使用表达式语法(适合DataFrame操作)

如果是在Polars DataFrame的上下文里操作,直接用列表达式即可,无需手动转标量:

import polars as pl

df = pl.DataFrame({"date": ["2023-01-12"]})
df = df.with_columns(
    dates=pl.date_range(
        pl.col("date").str.to_datetime().dt.offset_by("-3d"),
        pl.col("date").str.to_datetime(),
        interval="1d",
        periods=3
    )
)

注意:明确指定periods=3可以和原Pandas代码逻辑完全对齐,确保生成3个日期;如果不指定,Polars会默认包含起始到结束的所有日期(此场景下结果一致,但显式指定更清晰)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:48:27