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

Pandas DataFrame两日期列相减触发TypeError,求助解决

解决Pandas日期列相减报错的方法

问题根源

报错TypeError: unsupported operand type(s) for -: 'str' and 'str'的核心原因是:你的date_of_birth和date_of_death列是字符串类型,Pandas无法直接对字符串执行减法运算,必须先将它们转换为datetime格式。


解决步骤

1. 将字符串日期转换为datetime类型

使用pd.to_datetime()方法转换列,Pandas会自动识别大多数常见日期格式(如yyyy-mm-dd、mm/dd/yyyy等)。如果你的日期是特殊格式,可通过format参数指定:

import pandas as pd

# 通用转换(自动识别格式)
df['date_of_birth'] = pd.to_datetime(df['date_of_birth'])
df['date_of_death'] = pd.to_datetime(df['date_of_death'])

# 若日期格式为dd/mm/yyyy,需指定format
# df['date_of_birth'] = pd.to_datetime(df['date_of_birth'], format='%d/%m/%Y')
# df['date_of_death'] = pd.to_datetime(df['date_of_death'], format='%d/%m/%Y')

2. 计算生存年数

转换完成后,可根据需求选择以下方式计算年数:

  • 近似年数(按年份差):
    直接取年份相减,忽略月日细节,计算最快但精度有限:

    df['years_lived'] = df['date_of_death'].dt.year - df['date_of_birth'].dt.year
    
  • 基于天数的近似值(考虑闰年):
    将天数差除以365.25(平均年长度),比单纯年份差更准确:

    df['years_lived'] = (df['date_of_death'] - df['date_of_birth']).dt.days / 365.25
    
  • 精确年数(含月日判断):
    使用python-dateutil库的relativedelta计算满周年数,精度最高。先安装依赖:pip install python-dateutil,再执行:

    from dateutil.relativedelta import relativedelta
    
    df['years_lived'] = df.apply(lambda row: relativedelta(row['date_of_death'], row['date_of_birth']).years, axis=1)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:25:28