如何在Python中用另一列指定年份对日期列做减法运算?
解决方案
你遇到的错误核心原因是列a为字符串类型,列b为整数类型,二者无法直接执行减法运算。必须先将列a转换为datetime类型,提取对应时间信息后再计算。
步骤1:将字符串日期转为datetime类型
使用pandas的pd.to_datetime()方法,指定匹配的日期格式%m/%d/%Y %H:%M(对应月/日/年 时:分)完成转换,确保解析准确:
import pandas as pd example = { "a": ['1/1/1954 14:14','2/14/2001 2:00' , '2/15/2002 12:00'], "b": [1936,1996,1960], } df = pd.DataFrame(example) # 转换列a为datetime类型 df['a'] = pd.to_datetime(df['a'], format='%m/%d/%Y %H:%M')
步骤2:执行减法运算
根据需求,提供两种常见计算方式:
方式1:计算年份差(提取a的年份减去b的年份)
直接提取datetime列的年份值,与b列整数做减法:
df['c'] = df['a'].dt.year - df['b']
执行后df['c']结果为[18, 5, 42]。
方式2:计算日期与b年份起始日的时间差
如果需要具体的时间间隔(比如天数),先构造b年份的元旦日期,再与a列做差:
# 构造b年份的1月1日datetime对象 df['b_date'] = pd.to_datetime(df['b'].astype(str) + '-01-01') # 计算天数差 df['c'] = (df['a'] - df['b_date']).dt.days
执行后df['c']结果为[6574, 408, 2231]。若需要年数间隔,可使用dateutil的relativedelta工具:
from dateutil.relativedelta import relativedelta df['c'] = df.apply(lambda row: relativedelta(row['a'], row['b_date']).years, axis=1)
内容的提问来源于stack exchange,提问作者Shu
相关产品推荐
相关产品推荐

