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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:42:06