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

Polars中使用schema_overrides时自动解析字符串格式日期为Datetime类型的方法问询

Polars中使用schema_overrides时自动解析字符串格式日期为Datetime类型的方法问询

我理解你的困扰——当用Polars的from_dicts或DataFrame构造器时,想通过schema_overrides强制日期列类型为pl.Datetime,但输入是字符串格式的日期(比如2020-02-11)时总是报错,还要手动先去掉日期列的schema配置、之后再转类型,确实有点麻烦。

先直接说结论:目前Polars还没有支持在schema_overrides或schema参数中自动将字符串日期解析为pl.Datetime的功能(类似2024年初新增的自动将整数时间戳转为Datetime的特性)。这是因为schema_overrides的设计是强制输入数据与目标类型严格一致,而不是自动做格式转换。

不过有几个更顺畅的替代方案,不用手动逐个列处理:

方案1:先处理非日期列的schema,再批量转换日期列

先把非日期列的类型用schema_overrides配置好,之后用str.to_datetime()批量转换所有需要的日期列——如果你的日期格式是标准ISO格式(比如YYYY-MM-DD),Polars能自动识别:

import polars as pl

# 只配置非日期列的类型覆盖
schema_override = {
    "some_int_override": pl.Int8,
}
dict_data = [
    {
        "some_int_override": 1,
        "some_date_override": "2020-02-11",
        "some_date": "2025-02-11",
    }
]

# 先应用schema override到非日期列
df = pl.DataFrame(dict_data, schema_overrides=schema_override)
# 批量转换日期列,支持同时指定多个列
df = df.with_columns(
    pl.col("some_date_override", "some_date").str.to_datetime()
)
print(df)

方案2:自动检测所有可解析的字符串日期列

如果你不确定哪些列是日期字符串,或者想一次性处理所有符合格式的列,可以用pl.col(pl.Utf8)选中所有字符串列,配合try_parse=True参数——Polars会自动跳过无法解析为Datetime的字符串列,不会报错:

df = pl.DataFrame(dict_data, schema_overrides=schema_override)
df = df.with_columns(
    pl.col(pl.Utf8).str.to_datetime(try_parse=True).keep_name()
)
print(df)

为什么直接用schema_overrides指定pl.Datetime会报错?

因为schema_overrides的作用是强制列的类型一致性:它要求输入数据已经是目标类型(比如pl.Datetime对象),而不是自动将其他类型转换为目标类型。所以当你传入字符串时,Polars会抛出类型不匹配的错误。

关于类似整数时间戳的自动解析功能

你提到的2024年初Polars新增的“自动将整数时间戳转为Datetime”的特性,是针对Polars能直接识别的时间戳格式(比如毫秒/秒级整数)做的特殊优化,但目前还没有扩展到字符串日期的自动解析——这个需求确实合理,你可以考虑在Polars的GitHub仓库提Feature Request,说不定后续版本会支持。

最后,针对你的MRE,用上面的方案调整后就能正常运行,不用再手动删除schema里的日期键啦。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 12:39:38