如何在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
相关产品推荐
相关产品推荐

