如何将存在两种不同格式的日期列转换为统一格式并解决ValueError报错
问题原因
你当前的代码仅适配了斜杠分隔的%d/%m/%Y格式日期,遇到横杠分隔的%d-%m-%Y格式时无法匹配,因此抛出格式错误。
解决方案
方案1:使用pandas内置方法自动识别(更推荐)
pandas的to_datetime方法支持自动推断多种日期格式,无需手动判断分隔符:
import pandas as pd # 统一转换为datetime格式,dayfirst=True指定日期为日/月/年顺序,匹配你的示例数据 superstore['Order Date'] = pd.to_datetime(superstore['Order Date'], dayfirst=True) # 直接提取年月格式化输出 superstore['Order Month'] = superstore['Order Date'].dt.strftime('%m/%Y')
方案2:自定义解析函数兼容两种格式
如果你坚持用apply方法,可以在函数内增加异常处理,匹配两种格式:
import datetime def parse_order_date(date_str): try: # 先尝试匹配斜杠格式 return datetime.datetime.strptime(date_str, "%d/%m/%Y").strftime('%m/%Y') except ValueError: # 匹配失败时尝试横杠格式 return datetime.datetime.strptime(date_str, "%d-%m-%Y").strftime('%m/%Y') superstore['Order Month'] = superstore['Order Date'].apply(parse_order_date)
注意事项
两种方案都默认你的日期为「日-月-年」/「日/月/年」顺序,和你给出的13-01-2011示例(13为日)逻辑一致,不会出现日月混淆的问题。
内容的提问来源于stack exchange,提问作者Giuseppe
相关产品推荐
相关产品推荐

