如何在Python Pandas中计算字符串格式日期列的差值?
解决方法
你的报错核心问题是日期格式匹配错误——%B 对应完整月份名称(比如英文里的January),而你的日期字符串用的是月份缩写May,应该用%b来匹配。另外,不需要把pandas datetime对象转成Python原生的date(),直接用pandas的datetime系列运算更高效。
正确代码步骤:
- 将字符串日期列转换为pandas datetime类型,指定正确的格式:
import pandas as pd df1 = pd.DataFrame({'date1' : ['30-May-2024','30-May-2024','30-May-2024'],'date2' : ['20-May-2024','20-May-2024','10-May-2024']}) # 转换日期列,指定格式匹配缩写月份 df1['date1'] = pd.to_datetime(df1['date1'], format='%d-%b-%Y') df1['date2'] = pd.to_datetime(df1['date2'], format='%d-%b-%Y')
- 计算日期差并提取天数:
date_diff = (df1['date1'] - df1['date2']).dt.days print(date_diff)
输出结果:
0 10 1 10 2 20 dtype: int64
错误点说明:
- 你原代码里用
.date()是错误的,pandas的datetime Series不能直接调用单个datetime对象的.date()方法,需要用.dt.date,但其实完全没必要转成原生date对象,pandas自己的datetime类型直接相减就能得到时间差,再用.dt.days提取天数即可。 - 报错里的格式不匹配,是因为解析时用了
%B(完整月份名),而你的日期是缩写月份,换成%b就能正确匹配。
内容的提问来源于stack exchange,提问作者mona
相关产品推荐
相关产品推荐

