如何计算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
相关产品推荐
相关产品推荐

