2016-10-26 100 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