使用多种日期格式解析csv的日期

时间:2017-08-30 08:46:10

标签: python pandas csv datetime datetime-parsing

我有一个csv文件,其中包含多种格式的日期,如下所示:

Date              X1     X2
12/6/2017 23:00 928.88  3.19
12/6/2017 23:20 928.86  3.37
12/6/2017 23:40 930.26  3.38
13-06-17 0:00   930.37  3.41
13-06-17 0:20   930.39  3.49
13-06-17 0:40   930.15  3.54
13-06-17 1:00   930.36  3.46

我想解析日期,但格式不同:

我试过了:

date_formats = ["%d /%m /%Y%H:%M","%d-%m-%Y%H:%M"]

for x in date_formats:
    try:
        dateparse = lambda dates: datetime.strptime(dates, x)
    except ValueError:
        dateparse = lambda dates: datetime.strptime(dates, x)

df2 = read_csv("Copy.csv", parse_dates=True, 
              index_col="Time", date_parser=dateparse)

但我收到格式错误。

ValueError: time data '5/6/2017 0:00' does not match format '%d-%m-%Y %H:%M'

还有其他方法可以解析csv文件的不同日期格式吗? 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

pandas中的内置日期分析器已经足够处理这个问题了,所以只需传递param parse_dates=[0]告诉read_csv将第一列解析为日期时间,另外你需要传递dayfirst=True

In[19]:
import pandas as pd
import io
t="""Date,X1,X2
12/6/2017 23:00,28.88,3.19
12/6/2017 23:20,928.86,3.37
12/6/2017 23:40,930.26,3.38
13-06-17 0:00,930.37,3.41
13-06-17 0:20,930.39,3.49
13-06-17 0:40,930.15,3.54
13-06-17 1:00,930.36,3.46"""
df = pd.read_csv(io.StringIO(t), parse_dates=['Date'], dayfirst=True)
df
Out[19]: 
                 Date      X1    X2
0 2017-06-12 23:00:00   28.88  3.19
1 2017-06-12 23:20:00  928.86  3.37
2 2017-06-12 23:40:00  930.26  3.38
3 2017-06-13 00:00:00  930.37  3.41
4 2017-06-13 00:20:00  930.39  3.49
5 2017-06-13 00:40:00  930.15  3.54
6 2017-06-13 01:00:00  930.36  3.46