时间数据与格式不匹配

Ste*_*and 35 python datetime

我收到以下错误:

time data '07/28/2014 18:54:55.099000' does not match format '%d/%m/%Y %H:%M:%S.%f'
Run Code Online (Sandbox Code Playgroud)

但是我看不出哪个参数错了%d/%m/%Y %H:%M:%S.%f

这是我使用的代码.

from datetime import datetime
time_value = datetime.strptime(csv_line[0] + '000', '%d/%m/%Y %H:%M:%S.%f')
Run Code Online (Sandbox Code Playgroud)

我添加并删除了000但是我得到了同样的错误.

Mar*_*ers 70

你有月交换日:

'%m/%d/%Y %H:%M:%S.%f'
Run Code Online (Sandbox Code Playgroud)

28否则将永远不适合%m月份参数的范围.

使用%m%d正确的顺序解析工作:

>>> from datetime import datetime
>>> datetime.strptime('07/28/2014 18:54:55.099000', '%m/%d/%Y %H:%M:%S.%f')
datetime.datetime(2014, 7, 28, 18, 54, 55, 99000)
Run Code Online (Sandbox Code Playgroud)

你不需要添加'000'; %f可以正确解析较短的数字:

>>> datetime.strptime('07/28/2014 18:54:55.099', '%m/%d/%Y %H:%M:%S.%f')
datetime.datetime(2014, 7, 28, 18, 54, 55, 99000)
Run Code Online (Sandbox Code Playgroud)


Fáb*_*bio 20

虽然上面的答案是100%有用和正确的,但我想补充以下内容,因为只有上述答案和阅读pandas doc的组合帮助了我:

2位/ 4位数年份

值得注意的是,为了解析2位数年份,例如"90"而不是"1990",%y需要a而不是a %Y.

自动推断日期时间

如果使用预定义格式进行解析仍然不适合您,请尝试使用该标志infer_datetime_format=True,例如:

yields_df['Date'] = pd.to_datetime(yields_df['Date'], infer_datetime_format=True)
Run Code Online (Sandbox Code Playgroud)

请注意,此解决方案比使用预定义格式慢.

  • 感谢 %Y 的提示,解决了我的问题 (5认同)
  • 这是解决无休止的日期格式问题的一个很好的解决方案,谢谢@whiletrue! (4认同)

Ami*_*mar 13

无需使用日期时间库。使用 dateutil 库不需要任何格式:

>>> from dateutil import parser
>>> s= '25 April, 2020, 2:50, pm, IST'
>>> parser.parse(s)
datetime.datetime(2020, 4, 25, 14, 50)
Run Code Online (Sandbox Code Playgroud)

  • 就这个`from dateutil import parser;parser.parse('25 April, 2020, 2:50, pm, IST')`,我在Debian 10中使用python3-dateutil 2.7.3-3包。我没有检查带 pip 的最新版本。 (2认同)

Ana*_*eev 6

我遇到过一个很难找到解决方案的案例。这与特定问题并不完全相关,但可能会帮助某人在向 strptime 提供时区信息时解决具有相同错误消息的情况。就我而言,抛出的原因

ValueError:时间数据 '2016-02-28T08:27:16.000-07:00' 与格式 '%Y-%m-%dT%H:%M:%S.%f%z' 不匹配

时区部分中最后一个冒号的存在。虽然在某些语言环境(例如俄语)中代码能够很好地执行,但在另一种语言环境(例如英语)中却失败了。去掉最后一个冒号有助于纠正我的情况。