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

在Polars DataFrame中计算日期差并转换为周/月/年及类型转换

解决方案

要解决这个问题,你可以利用Polars内置的.dt.days()方法直接从日期差的duration类型中提取整数天数,再基于这个整数天数计算其他时间单位的近似差值:

完整代码示例

import datetime
import polars as pl

# 初始化DataFrame
df = pl.DataFrame(
    {"start_date": datetime.date(2024, 1, 1), "end_date": datetime.date(2024, 7, 31)}
)

# 计算各单位的日期差
df = df.with_columns(
    # 提取整数天数(将duration类型转为i64整数)
    (pl.col("end_date") - pl.col("start_date")).dt.days().alias("days"),
    # 近似周数(天数按7天取整)
    ((pl.col("end_date") - pl.col("start_date")).dt.days() // 7).alias("weeks"),
    # 近似月数(按30天计算,保留小数)
    ((pl.col("end_date") - pl.col("start_date")).dt.days() / 30).alias("months"),
    # 近似年数(按365天计算,保留小数)
    ((pl.col("end_date") - pl.col("start_date")).dt.days() / 365).alias("years")
)

print(df)

输出结果

shape: (1, 6)
┌────────────┬────────────┬──────┬───────┬──────────┬──────────┐
│ start_date ┆ end_date   ┆ days ┆ weeks ┆ months   ┆ years    │
│ ---        ┆ ---        ┆ ---  ┆ ---   ┆ ---      ┆ ---      │
│ date       ┆ date       ┆ i64  ┆ i64   ┆ f64      ┆ f64      │
╞════════════╪════════════╪══════╪═══════╪══════════╪══════════╡
│ 2024-01-01 ┆ 2024-07-31 ┆ 212  ┆ 30    ┆ 7.066667 ┆ 0.580822 │
└────────────┴────────────┴──────┴───────┴──────────┴──────────┘

关键说明

  • .dt.days()是Polars专门用于从duration类型中提取天数的方法,直接返回整数类型(i64),无需手动处理单位转换。
  • 周数、月数、年数的计算完全遵循你要求的近似规则:
    • 周数用整数除法//取整,若需要保留小数可改用普通除法/
    • 月数按30天/月、年数按365天/年计算近似值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:12:20