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
相关产品推荐
相关产品推荐

