Jupyter Notebook中pd.to_datetime转换日期时间出现格式不匹配报错如何解决?
报错根因
从报错日志的最后一行可直接定位问题:你指定的时间格式与数据实际格式不匹配,存在两处差异:
- 年月日分隔符不匹配:你设置的格式用
/分隔,但实际数据用-分隔 - 时间精度不匹配:你设置的格式包含秒位
%S,但实际数据只有时、分两个时间维度,没有秒值
排查步骤
- 先抽样确认字段整体格式,执行代码:
print(Uber_2014['Date/Time'].head(20)) - 排查是否存在混合格式的脏数据,执行代码统计不同长度的字符串占比:
print(Uber_2014['Date/Time'].str.len().value_counts())
解决方案
方案1:匹配实际格式手动指定(效率最高)
如果全量数据统一为月-日-年 时:分的格式,直接修改format参数即可:
Uber_2014['Date/Time'] = pd.to_datetime(Uber_2014['Date/Time'], format="%m-%d-%Y %H:%M")
方案2:兼容脏数据场景
如果存在部分格式异常的脏数据,添加errors='coerce'参数将不符合格式的值转为空时间值NaT,后续可单独过滤处理异常数据:
Uber_2014['Date/Time'] = pd.to_datetime(Uber_2014['Date/Time'], format="%m-%d-%Y %H:%M", errors='coerce') # 查看转换失败的异常数据 print(Uber_2014[Uber_2014['Date/Time'].isna()]['Date/Time'])
方案3:自动推断格式(兼容性最强)
如果确认数据存在多种混合格式,可省略format参数让pandas自动推断格式:
Uber_2014['Date/Time'] = pd.to_datetime(Uber_2014['Date/Time'], infer_datetime_format=True)
结果验证
转换完成后执行以下代码确认转换成功:
- 查看字段类型:
print(Uber_2014['Date/Time'].dtype),输出为datetime64[ns]即为成功 - 抽样查看转换结果:
print(Uber_2014['Date/Time'].head(10))
内容的提问来源于stack exchange,提问作者Jigar Patel
相关产品推荐
相关产品推荐

