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

