求助:时间数据格式不匹配引发ValueError报错,修改代码仍未解决
时间格式匹配报错问题解决
我使用他人编写的脚本(该脚本已正常运行数月),但遇到如下报错:
Exception has occurred: ValueError time data '2022-12-28 14:43:08.908271' does not match format '%m/%d/%Y %I:%M:%S %p' (match) File ". . .\res-script.py", line 19, in <module> end = pd.to_datetime(yesterday, format="%m/%d/%Y %I:%M:%S %p").normalize()
我尝试了以下修改,但仍出现相同报错:
today_date = datetime.today().strftime('%Y-%m-%d') yesterday = datetime.today() end = pd.to_datetime(yesterday, format='%Y-%m-$d %H:%M:%S').normalize()
问题分析与解决方法
核心问题:格式不匹配
原代码指定的格式%m/%d/%Y %I:%M:%S %p是「月/日/年 12小时制时间+上/下午标识」,但实际传入的时间字符串是'2022-12-28 14:43:08.908271',对应格式是「年-月-日 24小时制时间+毫秒」,两者完全不匹配,所以触发报错。你的修改里的错误
- 格式字符串存在笔误:
%Y-%m-$d中的$d应改为%d - 未覆盖时间字符串里的毫秒部分(
.908271) - 若
yesterday已经是datetime对象(比如你修改后用datetime.today()赋值),无需再用pd.to_datetime转换,直接调用.normalize()即可。
- 格式字符串存在笔误:
正确的解决方式
- 如果
yesterday是datetime对象:from datetime import timedelta yesterday = datetime.today() - timedelta(days=1) # 注:你原代码里yesterday赋值为today,应该要减一天才对 end = yesterday.normalize() - 如果
yesterday是字符串:
要么指定完全匹配的格式:
要么让pandas自动推断格式(适合格式不固定的场景):end = pd.to_datetime(yesterday, format='%Y-%m-%d %H:%M:%S.%f').normalize()end = pd.to_datetime(yesterday).normalize()
- 如果
内容的提问来源于stack exchange,提问作者j9pino
相关产品推荐
相关产品推荐

