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

