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

如何计算datetime64类型日期与指定日期的年份差值?

解决Pandas日期与指定日期的年份间隔计算问题

错误原因分析

  • 用列表['2023-01-01']转datetime64得到的是numpy数组,写法不规范,且和Series相减后得到的是天数差,并非你需要的年份间隔
  • 直接通过天数差除以365会忽略闰年的影响,导致年份计算不准确

针对你的场景的最优解法

因为你的所有日期都是1月1日,和对比日期2023-01-01同月同日,直接提取年份做减法最准确高效:

import numpy as np
import pandas as pd

data = {
         'Date': ['2021-01-01','2020-01-01','2019-01-01','2028-01-01']
        }

df = pd.DataFrame(data, columns = ['Date'])
df['Date']= df['Date'].astype('datetime64')

# 计算年份间隔
df['Year_Interval'] = df['Date'].dt.year - 2023
print(df)

输出结果:

Date  Year_Interval
0 2021-01-01             -2
1 2020-01-01             -3
2 2019-01-01             -4
3 2028-01-01              5

通用场景解法(日期非同月同日)

如果你的日期不是固定同月同日,需要计算精确的年份差(考虑月份和日期),可以用dateutil.relativedelta:

from dateutil.relativedelta import relativedelta

compare_date = pd.to_datetime('2023-01-01')
df['Year_Interval'] = df['Date'].apply(lambda x: relativedelta(x, compare_date).years)

这个方法会自动处理月份和日期的差异,比如2022-12-31和2023-01-01的年份差是-1,2023-02-01和2023-01-01的年份差是0。

修正你原来的代码写法

如果你坚持要先计算时间差再转年份,需要把对比日期转成Pandas Timestamp,再按平均年天数计算(兼顾闰年):

compare_date = pd.to_datetime('2023-01-01')
df['Time_Delta'] = df['Date'] - compare_date
# 按365.25天/年的平均值计算
df['Year_Interval'] = df['Time_Delta'].dt.days / 365.25

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:10:22