我正在加载许多我要绘制的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():])
是什么意思?
答案 0 :(得分:1)
该错误消息意味着strptime
正在转换其中包含的信息比格式中指定的更多的字符串,例如秒或微秒。例如,如果我尝试以strptime
格式%d/%m/%Y %H:%M
推送'14 / 01/2015 14:27:00.000'到strptime
,我会收到同样的错误。要在我的示例中使用此功能,我需要在%d/%m/%Y %H:%M:%S.%f
- .1
中使用以下格式。
不确定您的文件是什么样的,但是pandas库具有非常好的日期/时间理解能力。我不确定我之前是否确实遇到过您的问题,但根据我的经验,它通常会在没有太多(如果有的话)的情况下正确猜测格式。
编辑:实际上,如果您阅读了使用pandas发布的文件片段,它会将日期作为列名称,并将.1
附加到第二列,因为列名称应该是唯一的。似乎strptime
正好是日期\时间字符串的一部分,而该字符串未被datetime
调用中指定的格式捕获。所以,也许你已经在处理中的某个时刻使用了pandas。请注意,pandas默认情况下不会创建列名function Asteroid:updateAnimation(deltaTime)
-- use self instead of Asteroid in this function
end
对象,它会假设它们是字符串。