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

如何将Polars中混合格式的字符串列转换为日期类型?

解决Polars中多格式日期字符串统一转换为YYYY-MM-DD的问题

你的问题根源是仅指定了单一日期格式%d%m%Y,但输入的三个日期字符串分属三种不同格式,导致转换失败全为null。Polars的str.to_date方法支持传入格式列表,在strict=False模式下会依次尝试每个格式,直到匹配成功,以此实现多格式日期的统一转换。

解决方案代码

import polars as pl

s = pl.Series("date",["Sun Jul  8 00:34:60 2001", "12Mar2022", "12/Mar/2022"])

# 定义所有需要匹配的日期格式
date_formats = [
    "%a %b %d %H:%M:%S %Y",  # 匹配 "Sun Jul  8 00:34:60 2001"
    "%d%b%Y",                # 匹配 "12Mar2022"
    "%d/%b/%Y"               # 匹配 "12/Mar/2022"
]

df = s.to_frame().with_columns(
    pl.col("date").str.to_date(date_formats, strict=False).alias("standardized_date")
)

print(df)

转换结果

shape: (3, 2)
┌──────────────────────────┬──────────────────┐
│ date                     │ standardized_date│
│ ---                      │ ---              │
│ str                      │ date             │
╞══════════════════════════╪══════════════════╡
│ Sun Jul  8 00:34:60 2001 │ 2001-07-08       │
│ 12Mar2022                │ 2022-03-12       │
│ 12/Mar/2022              │ 2022-03-12       │
└──────────────────────────┴──────────────────┘

关键说明

  • 你可以根据实际存在的日期格式,继续向date_formats列表中添加对应的格式字符串
  • strict=False是核心逻辑:单条记录匹配第一个格式失败时,会自动尝试下一个格式,直到找到匹配项;若所有格式都不匹配,结果才会返回null
  • 格式符号含义:
    • %a:星期缩写(如Sun)
    • %b:月份缩写(如Jul、Mar)
    • %d:日期(不足两位补空格时也能匹配,比如示例中的Jul 8)
    • %Y:四位年份
    • %H:%M:%S:时分秒部分(转换时会被忽略,仅提取日期核心信息)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:22:14