解析具有多个日期格式的CSV日期

3

我有一个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个回答

3

pandas中内置的日期解析器已经足够强大,可以处理这个问题,所以只需将参数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

在你的例子中,天数已经被转换成了月份。请看前三行。 - Dheeraj
请查看更新的答案,您需要传递 dayfirst=True 参数。 - EdChum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接