2016-10-26 141 views
1

我有一個數據幀包含日期&時間數據「DTIME」欄:轉換範圍的時間數據,日期時間在大熊貓to_datetime

01JAN2004 00:00-01:00 
    01JAN2004 01:00-02:00 

我試着使用解析:

pd.to_datetime(df['DTime'], format='%d%b%Y %H:%M-%H:%M') 

但是這給:

error: redefinition of group name 'H' as group 6; was group 4 

我試圖刪除「-H:M」但這給了一個'未轉換的數據錯誤。

有沒有辦法做到這一點,並將時間基準設置爲第一個給定小時?

+2

那麼你需要確定最終的DF應該是什麼樣子,你在此範圍內希望2個日期時間?乞討和結束,或者你只想要開放時間? – EdChum

+0

只在這種情況下打開時間。 – BenP

回答

2
df = pd.DataFrame([ 
     '01JAN2004 00:00-01:00', 
     '01JAN2004 01:00-02:00' 
     ], columns=['dstr']) 

date_regex = '(?P<date>\d\d\w{3}\d{4})' 
beg_regex = '(?P<beg_hour>\d\d):(?P<beg_min>\d\d)' 
end_regex = '(?P<end_hour>\d\d):(?P<end_min>\d\d)' 
regex = '{} {}-{}'.format(date_regex, beg_regex, end_regex) 
d1 = df.dstr.str.extract(regex, expand=True) 
for c in ['beg_hour', 'beg_min', 'end_hour', 'end_min']: 
    d1[c] = d1[c].astype(int) 

pd.concat([ 
     pd.to_datetime(d1.date, format='%d%b%Y') + \ 
     pd.to_timedelta(d1.beg_hour, unit='H'), 
     pd.to_datetime(d1.date, format='%d%b%Y') + \ 
     pd.to_timedelta(d1.beg_hour, unit='H') 
    ], axis=1, keys=['Beg', 'End']) 

enter image description here

+0

謝謝,我以前沒有用過/看過這樣的解決方案。我只需要Beg時間,但這對未來是有用的 – BenP