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

