2017-03-15 71 views
0

我有包含與法國月份縮寫日期的日期列大熊貓據幀,如:解析最新與法國月份縮寫

u'18-oct.-2015' 
u'12-nov.-2015' 
u'02-d\xe9c.-2015' 
u'26-janv.-2016' 
u'02-f\xe9vr.-2016' 
u'31-mai-2016' 
u'01-juin-2016' 

什麼是使用to_datetime解析它們的正確方法?

+2

如果你能負擔得起使用一個外部庫,然後 - 'DF [ '日期']申請(拉姆達X:dateparser。 parse(x))'會將日期字符串轉換爲正確的'datetime64'格式。 (*'pip install dateparser' *如果你沒有安裝它) –

回答

0

我懷疑,你可以設置你的語言環境:

import locale 

locale.setlocale(locale.LC_ALL, 'fr_FR') # Windows may be a different locale name 

# do your pandas read here 

您可能需要告訴大熊貓是該列是datetime列......雖然它也有可能是你需要修復的列值 - janjanvier的適當縮寫。但熊貓可能足夠聰明來處理它。

+0

這似乎不起作用。更改語言環境後,Pandas無法檢測日期格式。 – sl1129

0

一個解決辦法是

import pandas as pd 
df = pd.DataFrame({'french datetime':[u'18-oct.-2015',u'12-nov.-2015',u'02-d\xe9c.-2015',u'26-janv.-2016',u'02-f\xe9vr.-2016',u'31-mai-2016',u'01-juin-2016']}) 

# make a dictionary that maps the month name in french to a number 
frenc_to_eng = {u'oct.': u'10', u'nov.':u'11',u'janv.':u'1',u'd\xe9c.':u'12',u'f\xe9vr.':u'2',u'mai':u'5',u'juin':u'6'} 

# make new columsn for day month and year. FOr month, map the french name to month numbers 
df['day'] = df['french datetime'].apply(lambda x : x.split('-')[0]) 
df['month'] = df['french datetime'].apply(lambda x : x.split('-')[1]).map(frenc_to_eng) 
df['year'] = df['french datetime'].apply(lambda x : x.split('-')[2]) 

# make date time column from year, month and day. 
df['date'] = pd.to_datetime(df['year']+'-'+df['month']+'-'+df['day'],format='%Y-%m-%d', errors='ignore') 

print df 

結果

french datetime day month year  date 
0 18-oct.-2015 18 10 2015 2015-10-18 
1 12-nov.-2015 12 11 2015 2015-11-12 
2 02-déc.-2015 02 12 2015 2015-12-02 
3 26-janv.-2016 26  1 2016 2016-01-26 
4 02-févr.-2016 02  2 2016 2016-02-02 
5  31-mai-2016 31  5 2016 2016-05-31 
6 01-juin-2016 01  6 2016 2016-06-01