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

Pandas 1.5.3与2.0.3日期算术运算结果差异咨询

Pandas 1.5.3与2.0.3日期月份差值计算差异原因

问题重现

你的代码在两个Pandas版本中输出结果存在明显差异:

  • Pandas 1.5.3输出:11.992
  • Pandas 2.0.3输出:11.774

示例代码:

import pandas as pd
import numpy as np

date1 = pd.to_datetime('2022-07-25')
date2 = pd.to_datetime('2023-07-25')

diff = (date2-date1)/np.timedelta64(1, 'M')

print(diff)

差异核心原因

这个差异源于Pandas 2.0+调整了Timedelta与numpy timedelta64('M')的除法运算逻辑:

  1. Pandas 1.5.x的处理逻辑
    Pandas会自行处理该除法运算:将Timedelta的总天数除以平均每月天数(365.25/12≈30.4375天)。你的示例中两个日期差365天,计算为 365 / 30.4375 ≈ 11.992,与输出结果一致。

  2. Pandas 2.0.x的处理逻辑
    Pandas不再自行计算,而是将Timedelta转换为numpy的timedelta64[ns]对象,完全委托numpy执行除法。而numpy对timedelta64('M')的处理依赖其内部对“月”的近似定义,若你的环境中numpy将月近似为31天,就会得到365 / 31 ≈ 11.774的结果。

该变化属于Pandas底层与numpy交互逻辑的细节调整,未在官方发布说明中单独强调,因为它不属于公开API的变更,而是内部实现的优化。

更可靠的月份差值计算方式

由于“月”是可变长度的时间单位,用固定天数近似计算必然存在误差,推荐使用Pandas内置的日历月份差计算方法:

# 计算精准的日历月份差
diff_months = (date2.year - date1.year) * 12 + (date2.month - date1.month)
print(diff_months)  # 输出12,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:57:12