我收到以下错误:
time data '07/28/2014 18:54:55.099000' does not match format '%d/%m/%Y %H:%M:%S.%f'
但我看不出%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')
我添加并删除了000
,但我收到同样的错误。
答案 0 :(得分:58)
您有月交换日期:
'%m/%d/%Y %H:%M:%S.%f'
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)
您不需要添加'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)
答案 1 :(得分:13)
虽然上述答案100%有用且正确,但我想添加以下内容,因为只有上述答案的组合和通过pandas doc阅读才能帮助我:
值得注意的是,为了解析一个2位数的年份,例如, ' 90'而不是' 1990',需要%y
而不是%Y
。
如果使用预定义格式进行解析仍然不适合您,请尝试使用标记infer_datetime_format=True
,例如:
yields_df['Date'] = pd.to_datetime(yields_df['Date'], infer_datetime_format=True)
请注意,此解决方案比使用预定义格式慢。
答案 2 :(得分:7)
无需使用日期时间库。使用dateutil库,不需要任何格式:
>>> from dateutil import parser
>>> s= '25 April, 2020, 2:50, pm, IST'
>>> parser.parse(s)
datetime.datetime(2020, 4, 25, 14, 50)
答案 3 :(得分:3)
我遇到了一个很难解决的情况。这与特定问题并不完全相关,但是当向strptime提供时区信息时,可能会帮助寻求解决相同错误消息的人。就我而言,抛出的原因
ValueError:时间数据'2016-02-28T08:27:16.000-07:00'与格式'%Y-%m-%dT%H:%M:%S.%f%不匹配z'
是时区部分的最后一个冒号。在某些语言环境(例如,俄语)中,代码可以很好地执行,而在其他语言环境(例如,英语)中,则失败了。删除最后一个冒号有助于纠正我的处境。
答案 4 :(得分:1)
我也有类似的错误 -
time data '01-07-2020' does not match format '%d%m%Y' (match)
我不知道我必须在格式参数中使用连字符。这对我有用 -
df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y')
答案 5 :(得分:0)
要比较日期时间,您可以试试这个。日期时间格式可以更改
from datetime import datetime
>>> a = datetime.strptime("10/12/2013", "%m/%d/%Y")
>>> b = datetime.strptime("10/15/2013", "%m/%d/%Y")
>>> a>b
False
答案 6 :(得分:0)
我有完全相同的错误,但是格式和根本原因略有不同,并且由于这是当您搜索“时间数据与格式不匹配”时弹出的第一个问与答,所以我认为我会留下错误我为未来的观众打造:
我的初始代码:
start = datetime.strptime('05-SEP-19 00.00.00.000 AM', '%d-%b-%y %I.%M.%S.%f %p')
我在其中使用%I
来解析小时,在%p
中来解析“ AM / PM”。
错误:
ValueError:时间数据'05 -SEP-19 00.00.00.000000 AM'与格式'%d-%b-%y%I.%M.%S.%f%p'不匹配
我经历了datetime docs并最终以12小时制%I
实现,没有00 ...一旦我将00.00.00
更改为12.00.00
,问题已解决。
因此,使用%I
和%p
是01-12,或者使用%H
是00-23。
答案 7 :(得分:-2)
您只需从字符串中删除“/”并将“,”放入其中.. Boom
查看以下代码:
import datetime as dt
str = '01,01,2017'
datetime_value = dt.datetime.strptime(str,'%d,%m,%Y')
print(datetime_value) # prints: 2017-01-01 00:00:00