转换为日期时间时出现问题的格式 (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 对象,它会假设它们是字符串。