如何在Polars中解析仅含年月的日期字符串(无需冗余拼接)?
在Polars中解析仅含年月的日期字符串(自动补日为1)
直接用str.to_date并设置strict=False参数就能实现类似Python strptime的自动补日功能,无需拼接或拆分字段:
import polars as pl df = pl.DataFrame({"date": ["2024,2", "2024,12"]}) result = df.with_columns( pl.col("date").str.to_date("%Y,%m", strict=False).alias("parsed_date") ) print(result)
输出结果:
shape: (2, 2) ┌─────────┬─────────────┐ │ date ┆ parsed_date │ │ --- ┆ --- │ │ str ┆ date │ ╞═════════╪═════════════╡ │ 2024,2 ┆ 2024-02-01 │ │ 2024,12 ┆ 2024-12-01 │ └─────────┴─────────────┘
为什么这个方案更优
- 无需手动拼接
,1或拆分字段构造日期,代码简洁直观 strict=False参数会让Polars自动填充缺失的日期部分为1,和Python的strptime行为完全一致- 性能优于字符串拼接/拆分方案,直接调用底层日期解析逻辑,减少额外计算步骤
其他方案对比
如果不用strict=False,常见的替代方法是拼接,1后解析:
df.with_columns( pl.col("date").str.concat(",1").str.to_date("%Y,%m,%d").alias("parsed_date") )
或者拆分字段构造日期:
df.with_columns( pl.date( pl.col("date").str.split(",").list.get(0).cast(pl.Int32), pl.col("date").str.split(",").list.get(1).cast(pl.Int32), 1 ).alias("parsed_date") )
但这两种方法都不如直接设置strict=False来得简洁高效。
内容的提问来源于stack exchange,提问作者bzm3r
相关产品推荐
相关产品推荐

