使用Pandas读取Excel时日期格式异常致pd.to_datetime报错
解决混杂日期格式的转换问题
针对你遇到的多格式日期转换报错问题,提供以下几种实用解决方案:
方案1:让Pandas自动推断格式(最简方案)
移除指定的format参数,让Pandas自动识别不同日期格式,同时用errors='coerce'处理无效时间(比如你提到的秒数超过59的15/10/2022 11:13:64):
dfEx['Date'] = pd.to_datetime(dfEx['Date'], errors='coerce')
- 说明:
errors='coerce'会将无法解析的日期转为NaT,后续可通过dfEx['Date'].isna()定位这些无效行做针对性处理。
方案2:分格式转换后合并(更可控)
如果自动推断精度不够,可分别处理两种已知格式,再合并结果:
# 处理dd/mm/yyyy HH:MM:SS格式 format1 = pd.to_datetime(dfEx['Date'], format='%d/%m/%Y %H:%M:%S', errors='coerce') # 处理yyyy-mm-dd HH:MM:SS格式 format2 = pd.to_datetime(dfEx['Date'], format='%Y-%m-%d %H:%M:%S', errors='coerce') # 优先取第一种格式的解析结果,无效值用第二种格式填充 dfEx['Date'] = format1.fillna(format2)
方案3:读取Excel时直接处理(从源头解决)
在读取Excel阶段就处理日期列,避免后续转换麻烦:
# 方法A:让openpyxl直接解析日期列 dfEx = pd.read_excel(fileExcel, engine='openpyxl', parse_dates=['Date']) # 方法B:自定义转换器处理混杂格式 def parse_mixed_dates(date_str): try: return pd.to_datetime(date_str, format='%d/%m/%Y %H:%M:%S') except ValueError: try: return pd.to_datetime(date_str, format='%Y-%m-%d %H:%M:%S') except ValueError: return pd.NaT dfEx = pd.read_excel(fileExcel, engine='openpyxl', converters={'Date': parse_mixed_dates})
注意:Excel中15/10/2022 11:13:64属于无效时间(秒数超过59),所有方法都会将其转为NaT,需手动修正这些行的秒数后重新解析。
内容的提问来源于stack exchange,提问作者fransua
相关产品推荐
相关产品推荐

