Polars指定数据类型无效:出生日期列仍为字符串类型原因
问题解析:Polars指定Schema后日期列仍为字符串类型的原因
更新说明:当前Polars已修复此问题,出生日期列会按预期转为date类型。
原因分析
- Polars通过Python字典创建DataFrame时,会优先采用输入数据的原生类型,不会自动执行类型转换。你传入的
Date of Birth列是Python字符串列表,Polars会直接保留该类型,忽略Schema中指定的pl.Date。 - Schema参数的核心作用是校验数据类型是否匹配,而非主动转换。旧版本中,若输入类型与Schema指定类型不兼容,Polars不会自动转换,而是保留原类型;部分新版本会直接抛出类型不匹配的错误。
解决方案
有两种可靠方式将字符串列转为日期类型:
- 创建DataFrame时通过
pl.Series显式指定类型
import polars as pl data = { 'Age': [28, 32, 24, 45, 29], 'Date of Birth': ['1995-03-15', '1989-08-22', '1999-11-05', '1978-02-10', '1994-06-07'], 'City': ['New York', 'San Francisco', 'London', 'Tokyo', 'Sydney'], } df_listing_data = pl.DataFrame({ 'Age': pl.Series(data['Age'], dtype=pl.Int64), 'Date of Birth': pl.Series(data['Date of Birth'], dtype=pl.Date), 'City': pl.Series(data['City'], dtype=pl.String) })
- 创建后通过
with_columns转换类型
import polars as pl data = { 'Age': [28, 32, 24, 45, 29], 'Date of Birth': ['1995-03-15', '1989-08-22', '1999-11-05', '1978-02-10', '1994-06-07'], 'City': ['New York', 'San Francisco', 'London', 'Tokyo', 'Sydney'], } df_listing_data = pl.DataFrame(data).with_columns( pl.col('Date of Birth').str.to_date() )
内容的提问来源于stack exchange,提问作者r ram
相关产品推荐
相关产品推荐

