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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:48:05