Python3如何计算Pandas内MM-YYYY格式两日期的天/月/年时间差
问题解决方法
报错根因
- 你自定义的
time_diff函数中使用了格式符%d(仅匹配日期中的「天」字段),但输入的日期字符串是MM-YYYY格式,解析时无法识别剩余的-YYYY内容,直接触发格式匹配错误 - 之前的代码存在冗余操作:你已经将两列日期转为了datetime类型,后续又用
strftime转回了字符串格式,反而增加了日期计算的复杂度,完全不需要这一步转换
修正后实现代码
import pandas as pd import numpy as np import datetime # 拆分日期列逻辑保留 dateList = df["air_dates"].str.split("-", n = 1, expand = True) df['air_start_date'] = dateList[0] df['air_end_date'] = dateList[1] df.drop(columns = ['air_dates', 'rank'], inplace = True) # 直接转为datetime类型,不要转回字符串,指定格式提升解析准确率 df['air_start_date'] = pd.to_datetime(df['air_start_date'], format='%m-%Y', errors='coerce') df['air_end_date'] = pd.to_datetime(df['air_end_date'], format='%m-%Y', errors='coerce') # 清除空值 df.dropna(subset = ['air_start_date', 'air_end_date'], inplace = True) # 直接计算时间差,不需要自定义解析函数 # 单位:天 df['diff_days'] = (df['air_end_date'] - df['air_start_date']).dt.days # 单位:月(精准差值,不按自然月天数近似) df['diff_months'] = (df['air_end_date'].dt.year - df['air_start_date'].dt.year) * 12 + (df['air_end_date'].dt.month - df['air_start_date'].dt.month) # 单位:年 df['diff_years'] = df['diff_months'] / 12
补充说明
datetime类型直接相减得到的是timedelta类型,直接调用内置属性就可以获取对应单位的差值,不需要手动写字符串解析逻辑,也能避免格式匹配错误。
内容的提问来源于stack exchange,提问作者rkx74656
相关产品推荐
相关产品推荐

