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

求两日期列的年份差(保留4位小数)及Timedelta无item属性报错解决

解决日期差计算报错并实现年份差保留4位小数

首先,咱们先拆解你遇到的问题:'Timedelta' object has no attribute 'item'这个报错,大概率是你尝试对整列的Timedelta对象调用.item()方法导致的——.item()只能用来提取单个标量值,而你处理的是DataFrame的一列(也就是Series类型),自然会触发这个错误。

接下来咱们一步步修正代码,实现计算两个日期的年份差并保留4位小数的需求:

第一步:修正数据类型转换的小疏漏

先看你原代码里的这一行:

df_Years['maturity_date'] = pd.to_datetime(df_Date['maturity_date'])

这里你误写了DataFrame名称,应该把df_Date改成df_Years,避免引用错误:

df_Years['maturity_date'] = pd.to_datetime(df_Years['maturity_date'])

第二步:精确计算年份差并保留小数

计算两个日期的年份差,推荐用总天数除以年均天数365.2425(这个数值是考虑闰年的国际通用精确值),再通过.round(4)保留4位小数。

完整的修正代码如下:

import pandas as pd

# 筛选状态为Done的数据并复制
df_Years = df[df['state'].str.contains('Done')][['maturity_date']].copy()

# 转换到期日期为datetime类型(修正原代码的拼写错误)
df_Years['maturity_date'] = pd.to_datetime(df_Years['maturity_date'])

# 添加今日日期列
df_Years['Today'] = pd.to_datetime('today')

# 计算年份差:天数差除以年均天数,保留4位小数
df_Years['year_diff'] = (df_Years['maturity_date'] - df_Years['Today']).dt.days / 365.2425
df_Years['year_diff'] = df_Years['year_diff'].round(4)

# 查看结果
display(df_Years.head(6))

关键代码解释

  • (df_Years['maturity_date'] - df_Years['Today']).dt.days:计算两个日期的天数差,dt.days可以把整列的Timedelta对象转换成纯数值的天数列,避免直接操作Timedelta对象的报错。
  • 除以365.2425:相比直接用365,这个数值考虑了闰年的存在,计算出的年份差更精准。
  • .round(4):直接对整列数据做四舍五入,保留4位小数。

测试样例数据验证

用你给出的样例数据测试:比如第一行2022-12-15和2018-03-21的天数差是1730天,1730/365.2425≈4.7366,保留4位小数后正好是预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:30:16