我可以用不同的格式解析日期吗?

问题描述:

我的合作者在其数据中的日期格式不一致。我可以用不同的格式解析日期吗?

0 13/11/2016 
1 21/01/2017 
2 22/01/2017 
3 2017-02-02 
4 2016-12-11 
5 13/11/2016 
6 2016-12-12 
7 21/01/2017 
8 22/01/2017 
9 2017-02-02 

我希望能够解析成python分析的时间戳。使用parse_dates = True不起作用,我怀疑这是因为格式混合。

我可以用不同的格式解析日期吗?

+0

使用try-except-ValueError并通过文件中的每种可能的日期时间格式解析行。 –

+2

你的合作者是否同时发送美国和欧洲的日期?如果是这样,你会如何评估'01-02-2017'?是2017年2月1日还是2017年1月2日? – aydow

您可以使用to_datetime

第一格式(YYYY-MM-DD):

print (df) 
     dates 
0 13/11/2016 
1 21/01/2017 
2 22/01/2017 
3 2017-02-02 
4 2016-12-11 
5 13/11/2016 
6 2016-12-12 
7 21/01/2017 
8 22/01/2017 
9 2017-02-02 
9 2017-02-25 <- YYYY-MM-DD 

dates = pd.to_datetime(df.dates) 
print (dates) 
0 2016-11-13 
1 2017-01-21 
2 2017-01-22 
3 2017-02-02 
4 2016-12-11 
5 2016-11-13 
6 2016-12-12 
7 2017-01-21 
8 2017-01-22 
9 2017-02-02 
9 2017-02-25 
Name: dates, dtype: datetime64[ns] 

第二格式(YYYY-DD-MM

这是一个有点问题 - 需要参数formatto_datetimeerrors='coerce',最后combine_firstfillna

print (df) 
     dates 
0 13/11/2016 
1 21/01/2017 
2 22/01/2017 
3 2017-02-02 
4 2016-12-11 
5 13/11/2016 
6 2016-12-12 
7 21/01/2017 
8 22/01/2017 
9 2017-02-02 
9 2017-25-02 <- YYYY-DD-MM 

dates1 = pd.to_datetime(df.dates, format='%d/%m/%Y', errors='coerce') 
dates2 = pd.to_datetime(df.dates, format='%Y-%d-%m', errors='coerce') 

dates = dates1.combine_first(dates2) 
#dates = dates1.fillna(dates2) 
print (dates) 
0 2016-11-13 
1 2017-01-21 
2 2017-01-22 
3 2017-02-02 
4 2016-11-12 
5 2016-11-13 
6 2016-12-12 
7 2017-01-21 
8 2017-01-22 
9 2017-02-02 
9 2017-02-25 
Name: dates, dtype: datetime64[ns]