转换为日期时间时出现问题的格式 (data_string[found.end():]))
Format causing issues when converting to datetime (data_string[found.end():]))
我正在加载很多我想要绘制的 csv 文件,这些文件的列标题代表日期和时间。
例如:
14/01/2015 14:27 14/01/2015 14:27
29.97299 30.05902
30.00391 30.09555
出于某种原因,不同的文件会以不同的格式加载这些日期和时间,我在转换它们时 运行 遇到了麻烦。
我当前的代码:
for n, f in enumerate(files):
df = pd.read_csv(filePath+f, delimiter=',',index_col=0)
times = []
print df.columns.values[1]
for i, t in enumerate(df.columns.values):
if t[2]=='/':
time = datetime.strptime(t, '%d/%m/%Y %H:%M')
elif t[4]=='-':
time = datetime.strptime(t, '%Y-%m-%d %H:%M:%S')
else:
print "Is it a date? ", t
times.append(time)
timelists.append(times)
fig = plt.figure()
df.plot()
plt.savefig(figdir+(n+1).__str__()+"_"+f+".png", bbox_inches='tight',dpi=300)
print "Fig", n+1
plt.close(n)
产生这个:
2015-01-14 10:50:19
Fig 1
2015-01-14 14:01:15
Fig 2
2015-01-14 14:13:08
Fig 3
2015-01-14 14:27:53
Fig 4
2015-01-14 14:40:00
Fig 5
15/01/2015 13:03
Traceback (most recent call last):
后跟错误(带回溯):
File "D:/data/scripts/myscript.py", line 29, in <module>
time = datetime.strptime(t, '%d/%m/%Y %H:%M')
File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\_strptime.py", line 335, in _strptime
data_string[found.end():])
ValueError: unconverted data remains: .1
我不明白为什么会出现此错误,打印的最后日期采用我指定的格式,不是吗? data_string[found.end():])
是什么意思?
该错误消息表示 strptime
正在转换一个字符串,其中包含比格式中指定的信息更多的信息,例如秒或微秒。例如,如果我尝试使用 %d/%m/%Y %H:%M
格式将 '14/01/2015 14:27:00.000' 推送到 strptime
,我会得到同样的错误。为了在我的示例中实现这一点,我需要使用以下格式 strptime
- %d/%m/%Y %H:%M:%S.%f
。
不确定您的文件到底是什么样的,但是 pandas 库具有很好的 date/time 理解力。我不确定我之前是否确实遇到过你的问题,但根据我的经验,它通常会正确地猜测格式而不会太多(如果有的话)大惊小怪。
编辑:实际上,如果您阅读使用 pandas 发布的文件片段,它会将日期设为列名,并将 .1
附加到第二列,因为列名应该是唯一的.似乎 .1
正是 date\time 字符串的一部分,未被调用 strptime
时指定的格式捕获。因此,也许您在处理过程中的某个时刻已经在使用 pandas。请注意,默认情况下 pandas 不会使列名称成为 datetime
对象,它会假设它们是字符串。
我正在加载很多我想要绘制的 csv 文件,这些文件的列标题代表日期和时间。
例如:
14/01/2015 14:27 14/01/2015 14:27
29.97299 30.05902
30.00391 30.09555
出于某种原因,不同的文件会以不同的格式加载这些日期和时间,我在转换它们时 运行 遇到了麻烦。
我当前的代码:
for n, f in enumerate(files):
df = pd.read_csv(filePath+f, delimiter=',',index_col=0)
times = []
print df.columns.values[1]
for i, t in enumerate(df.columns.values):
if t[2]=='/':
time = datetime.strptime(t, '%d/%m/%Y %H:%M')
elif t[4]=='-':
time = datetime.strptime(t, '%Y-%m-%d %H:%M:%S')
else:
print "Is it a date? ", t
times.append(time)
timelists.append(times)
fig = plt.figure()
df.plot()
plt.savefig(figdir+(n+1).__str__()+"_"+f+".png", bbox_inches='tight',dpi=300)
print "Fig", n+1
plt.close(n)
产生这个:
2015-01-14 10:50:19
Fig 1
2015-01-14 14:01:15
Fig 2
2015-01-14 14:13:08
Fig 3
2015-01-14 14:27:53
Fig 4
2015-01-14 14:40:00
Fig 5
15/01/2015 13:03
Traceback (most recent call last):
后跟错误(带回溯):
File "D:/data/scripts/myscript.py", line 29, in <module>
time = datetime.strptime(t, '%d/%m/%Y %H:%M')
File "C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\_strptime.py", line 335, in _strptime
data_string[found.end():])
ValueError: unconverted data remains: .1
我不明白为什么会出现此错误,打印的最后日期采用我指定的格式,不是吗? data_string[found.end():])
是什么意思?
该错误消息表示 strptime
正在转换一个字符串,其中包含比格式中指定的信息更多的信息,例如秒或微秒。例如,如果我尝试使用 %d/%m/%Y %H:%M
格式将 '14/01/2015 14:27:00.000' 推送到 strptime
,我会得到同样的错误。为了在我的示例中实现这一点,我需要使用以下格式 strptime
- %d/%m/%Y %H:%M:%S.%f
。
不确定您的文件到底是什么样的,但是 pandas 库具有很好的 date/time 理解力。我不确定我之前是否确实遇到过你的问题,但根据我的经验,它通常会正确地猜测格式而不会太多(如果有的话)大惊小怪。
编辑:实际上,如果您阅读使用 pandas 发布的文件片段,它会将日期设为列名,并将 .1
附加到第二列,因为列名应该是唯一的.似乎 .1
正是 date\time 字符串的一部分,未被调用 strptime
时指定的格式捕获。因此,也许您在处理过程中的某个时刻已经在使用 pandas。请注意,默认情况下 pandas 不会使列名称成为 datetime
对象,它会假设它们是字符串。