pandas使用pd.to_datetime转换日期格式触发ValueError报错问题
报错原因
核心问题是传入pd.to_datetime的格式字符串和原始日期的结构不匹配:
- 待解析的原始日期为
15 January 2012样式,日、英文月份全称、年三个部分之间用空格分隔 - 你编写的格式参数为
"%d/%B/%Y",其中的/表示要求原始字符串用斜杠分隔日期各部分,和实际的空格分隔规则完全不符,因此触发值匹配错误,对应报错里的明确提示:ValueError: time data '19 February 2015' does not match format '%d/%B/%Y'。
这里是非常容易踩的误区:pd.to_datetime的format参数是用来描述输入的原始字符串的结构,不是你最终想要输出的日期格式,输出格式需要在成功解析为datetime类型后再单独调整。
额外提醒:你贴出的示例代码操作的列名是Last Date,但报错栈里实际运行的代码操作的是Last Refreshed on列,运行前要确认列名和待处理字段一致,避免触发列不存在的额外错误。
修复方案
按两步实现需求即可:
- 修正解析格式,用空格作为分隔符,把原始字符串正确解析为pandas的datetime64类型
- 如果最终需要输出
15/01/2012这类斜杠分隔的日/月/年字符串格式,解析完成后通过dt.strftime做格式转换即可;如果后续要做日期计算、时间筛选、按时间聚合等操作,保留datetime类型即可,不需要转成字符串。
参考代码:
import pandas as pd # 第一步:按原始字符串的空格分隔规则解析为日期类型,注意替换成你实际的列名 data['Last Date'] = pd.to_datetime(data['Last Date'], format="%d %B %Y") # 【可选步骤】如果需要转成dd/mm/yyyy样式的字符串,取消注释下面这行运行 # data['Last Date'] = data['Last Date'].dt.strftime("%d/%m/%Y") print(data.info())
补充说明:如果运行时出现英文月份无法识别的问题,一般是系统默认语言环境非英文导致,临时设置英文locale即可解决,绝大多数默认环境下不需要额外处理。
内容的提问来源于stack exchange,提问作者Artyom47
相关产品推荐
相关产品推荐

