如何从日期字符串在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
相关产品推荐
相关产品推荐

