转换为datetime时导致问题的格式(data_string [found.end():]))

时间:2017-10-31 23:56:04

标签: python pandas datetime dataframe strptime

我正在加载许多我要绘制的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():])是什么意思?

1 个答案:

答案 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 对象,它会假设它们是字符串。