使用pd.to_datetime转换DataFrame的DateTime列出现ParserError报错如何处理
报错原因
报错核心是待转换的时间字符串14-09-2021 10:39:00:00不符合pandas默认的时间解析规则:
- 该字符串的秒级单位后多了一组用冒号分隔的数值(末尾的
:00),标准时间格式中秒和毫秒/微秒的分隔符为英文句号.,而非冒号,导致默认解析器无法识别。
解决方法
- 明确指定时间格式(最稳妥)
直接通过format参数告知pandas当前字符串的结构,无需修改原始数据,代码如下:
# 格式说明:%d=日,%m=月,%Y=4位年,%H=小时,%M=分钟,%S=秒,%f=微秒 Interventions_df['From DateTime'] = pd.to_datetime(Interventions_df['From DateTime'], format='%d-%m-%Y %H:%M:%S:%f') Interventions_df['To DateTime'] = pd.to_datetime(Interventions_df['To DateTime'], format='%d-%m-%Y %H:%M:%S:%f')
- 预处理修正时间字符串格式
先把不符合规范的冒号替换为标准的句号分隔符,再进行时间转换,适合需要统一时间格式的场景:
# 替换末尾秒后的冒号为句号 Interventions_df['From DateTime'] = Interventions_df['From DateTime'].str.replace(r':(\d+)$', r'.\1', regex=True) Interventions_df['To DateTime'] = Interventions_df['To DateTime'].str.replace(r':(\d+)$', r'.\1', regex=True) # 再执行时间转换 Interventions_df['From DateTime'] = pd.to_datetime(Interventions_df['From DateTime'], dayfirst=True) Interventions_df['To DateTime'] = pd.to_datetime(Interventions_df['To DateTime'], dayfirst=True)
- 添加容错参数(兜底方案)
如果存在少量格式异常的脏数据,可添加errors='coerce'参数,将无法解析的字符串转换为空值NaT,避免代码直接中断,后续可单独排查异常行:
Interventions_df['From DateTime'] = pd.to_datetime(Interventions_df['From DateTime'], dayfirst=True, errors='coerce') Interventions_df['To DateTime'] = pd.to_datetime(Interventions_df['To DateTime'], dayfirst=True, errors='coerce') # 可通过以下代码筛选转换失败的异常行 invalid_rows = Interventions_df[Interventions_df['From DateTime'].isna() | Interventions_df['To DateTime'].isna()]
内容的提问来源于stack exchange,提问作者Chio
相关产品推荐
相关产品推荐

