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

如何在Polars中解析仅含小时无分钟的Datetime字符串(如%Y%m%d%H)

Polars解析仅含小时的日期字符串解决方案

你遇到的问题是因为Polars依赖的chrono库对时间格式解析有严格要求:如果指定了小时(%H),必须同时指定分钟(%M),这和Pandas的解析逻辑存在差异。下面是几个可行的解决方法:

  • 方法一:补全分钟部分再解析
    给日期字符串末尾拼接00作为分钟值,然后用包含分钟的格式字符串解析:

    df = df.with_columns(
        pl.col("date_str").str.replace(r"$", "00").str.strptime(pl.Datetime, "d=%Y%m%d%H%M")
    )
    

    这里用str.replace(r"$", "00")在每个字符串末尾添加00,将格式转为d=YYYYMMDDHHMM,完全符合chrono的解析要求。

  • 方法二:拆分日期和小时分别处理再合并
    先提取日期部分转为Date类型,再提取小时转成时长,最后将两者合并为Datetime:

    df = df.with_columns(
        # 提取日期部分并转为Date类型
        date_part=pl.col("date_str").str.extract(r"d=(\d{8})", 1).str.strptime(pl.Date, "%Y%m%d"),
        # 提取小时部分转为整数
        hour_part=pl.col("date_str").str.extract(r"d=\d{8}(\d{2})", 1).cast(pl.Int32)
    ).with_columns(
        # 合并日期与小时得到Datetime
        datetime=pl.col("date_part") + pl.col("hour_part").cast(pl.Duration, unit="h")
    ).drop("date_part", "hour_part")
    

    这种方法灵活性更高,适合格式固定但时间部分不完整的场景。

  • 方法三:尝试自动推断(谨慎使用)
    如果你的日期字符串格式规整,也可以不指定格式,让Polars自动推断:

    df = df.with_columns(
        pl.col("date_str").str.to_datetime()
    )
    

    不过自动推断的可靠性不如指定格式,尤其是字符串带有d=这类特殊前缀时,可能识别失败,建议优先使用前两种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:02:18