Python中如何计算日期类型列的月份差值?
Pandas计算两列日期的月份差值解决方案
你遇到的错误是因为pd.Timedelta不支持month作为单位——月份的长度不固定(28-31天),无法用固定时长表示。以下是几种可行的计算方式:
方法1:通过年月直接计算(整数月份差,忽略天数)
直接提取日期的年份和月份,计算差值总和:
import pandas as pd data = { 'id_number': ['000001000', '000009795', '000011722'], 'first_date': ['2022-01-08 13:41:00', '2022-11-07 09:16:00', '2022-02-15 12:46:00'], 'last_date': ['2023-06-13 16:33:00', '2022-11-30 12:59:00', '2022-06-21 11:42:00'] } df_test = pd.DataFrame(data) df_test['first_date'] = pd.to_datetime(df_test['first_date']) df_test['last_date'] = pd.to_datetime(df_test['last_date']) # 计算月份差值 df_test['months_difference'] = (df_test['last_date'].dt.year - df_test['first_date'].dt.year)*12 + \ (df_test['last_date'].dt.month - df_test['first_date'].dt.month) print(df_test)
这种方式只看年月,比如2022-01-08到2022-02-01会被算作1个月。
方法2:使用Period类型计算
将日期转为月份周期(Period)后直接相减,结果与方法1一致:
# 转为月份周期后相减,再提取数值 df_test['months_difference'] = (df_test['last_date'].dt.to_period('M') - df_test['first_date'].dt.to_period('M')).dt.n
方法3:考虑实际天数的月份差(需依赖dateutil)
如果需要严格按照“满N个月”计算(比如2022-01-08到2022-02-07不算1个月,到2022-02-08才算),可以使用dateutil的relativedelta:
from dateutil.relativedelta import relativedelta def get_month_diff(row): delta = relativedelta(row['last_date'], row['first_date']) return delta.years * 12 + delta.months df_test['months_difference'] = df_test.apply(get_month_diff, axis=1)
注意:使用前需要先安装依赖包:pip install python-dateutil
内容的提问来源于stack exchange,提问作者danny
相关产品推荐
相关产品推荐

