Pandas合并日期时间列转datetime时dateutil.parser报错如何解决
问题原因分析
从报错日志可以直接定位根因:你的数据中存在非法时间字符串,比如报错里的09 Sep 2021 84'。时间列并非全部是样例中的HH:MM合法格式,存在脏数据:
- 出现超过23的小时值、超过59的分钟值
- 存在多余的无效符号(比如报错中的单引号)
解决步骤
第一步:排查清洗脏数据
先找出所有不符合时间格式的异常行,根据业务规则处理:
# 匹配HH:MM合法格式,筛选出不符合的异常行 invalid_rows = df[~df['time'].str.match(r'^([01]?[0-9]|2[0-3]):[0-5][0-9]$')] print(invalid_rows)
你可以根据业务场景选择删除异常行、修正异常值,或者后续将异常值转为时间缺失值。
第二步:执行日期时间转换
方案1:容错转换(自动处理非法值)
如果接受异常时间转为缺失值NaT,可以加errors='coerce'参数避免报错中断:
df['datetime'] = pd.to_datetime(df['date'] + ' ' + df['time'], errors='coerce')
方案2:指定格式转换(效率更高、解析更准确)
清洗完所有脏数据后,可以指定匹配你数据的格式参数,提升转换效率,避免自动解析出现偏差:
df['datetime'] = pd.to_datetime(df['date'] + ' ' + df['time'], format='%d %b %Y %H:%M')
内容的提问来源于stack exchange,提问作者user16304089
相关产品推荐
相关产品推荐

