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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 08:40:09