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

如何在Polars中将数值类型Year列转换为日期列?

Polars中将数值型年份列转换为日期列的正确方法

正确实现方式

方法1:先转字符串再解析日期

针对你第一次错误尝试,只需先将数值型的year列转换为字符串类型,再调用str.to_date即可:

pl_gapminder = pl_gapminder.with_columns(
    pl.col('year').cast(pl.String).str.to_date(format='%Y').alias('date')
)
pl_gapminder.select('year', 'date').head()

输出结果:

year    date
i64     date
1952    1952-01-01
1957    1957-01-01
1962    1962-01-01
1967    1967-01-01
1972    1972-01-01

方法2:直接使用pl.date构造日期

更直观的方式是利用Polars的pl.date函数,指定年份、月份(默认1)和日期(默认1):

pl_gapminder = pl_gapminder.with_columns(
    pl.date(pl.col('year'), 1, 1).alias('date')
)

这种方法无需类型转换,直接基于数值年份生成YYYY-01-01格式的日期,逻辑更清晰。

错误原因解析

错误尝试1的问题

str.to_date方法仅支持字符串类型的输入,而你的year列是整数型(i64),因此触发SchemaError。必须先通过cast(pl.String)将整数转换为字符串后再解析。

错误尝试2的问题

直接将整数cast(pl.Date)时,Polars会将整数值解释为从1970-01-01开始计算的天数,而非年份。例如1952天对应的日期就是1975-05-07,这就是你看到异常结果的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:22:53