2017-03-25 77 views
1

我導入excel文件,其中「日期」一欄寫有不同的方式:轉換號文件,以大熊貓

 Date 
13/03/2017 
13/03/2017 
13/03/2017 
13/03/2017 
    10/3/17 
    10/3/17 
    9/3/17 
    9/3/17 
    9/3/17 
    9/3/17 

導入到熊貓:

df = pd.read_excel('data_excel.xls') 
df.Date = pd.to_datetime(df.Date) 

結果:

     Date 
       13/03/2017 
64    13/03/2017 
65    13/03/2017 
66    13/03/2017 
67 2017-10-03 00:00:00 
68 2017-10-03 00:00:00 
69 2017-09-03 00:00:00 
70 2017-09-03 00:00:00 
71 2017-09-03 00:00:00 
72 2017-09-03 00:00:00 

這意味着,大熊貓並沒有解析正確的日期和時間:

10/3/17 -> 2017-10-03 

,當我試圖指定格式:

df.Date = pd.to_datetime(df.Date, format='%d%m%Y') 

得到了錯誤:

ValueError: time data u'13/03/2017' does not match format '%d%m%Y' (match) 

問:

如何從Excel導入正確的日期和時間文件到熊貓?

回答

2

新的答案:

其實pd.to_datetimedayfirst關鍵字說法,在這裏很有用:

df.Date = pd.to_datetime(df.Date,dayfirst=True) 

結果:

>>> df.Date 
0 2017-03-13 
1 2017-03-13 
2 2017-03-13 
3 2017-03-13 
4 2017-03-10 
5 2017-03-10 
6 2017-03-09 
7 2017-03-09 
8 2017-03-09 
9 2017-03-09 
Name: Date, dtype: datetime64[ns] 

老答案:

使用可處理這些類型變體的第三方模塊dateutil。它有一個dayfirst關鍵字說法,在這裏很有用:

import dateutil 

df = pd.read_excel('data_excel.xls') 
df.Date = df.Date.apply(lambda x: dateutil.parser.parse(x,dayfirst=True)) 

結果:

>>> df.Date 
0 2017-03-13 
1 2017-03-13 
2 2017-03-13 
3 2017-03-13 
4 2017-03-10 
5 2017-03-10 
6 2017-03-09 
7 2017-03-09 
8 2017-03-09 
9 2017-03-09 
Name: Date, dtype: datetime64[ns] 
+0

太神奇了!感謝您指向'dayfirst = True'選項。我轉換爲CSV文件,小小的調整解決了這個問題,但這個解決方案非常強大。 –

+1

@ArnoldKlein:沒問題!快樂的編碼給你:-) – bernie