you can use .str.extract
method; starting with:
>>> df
date
0 2014-01-24 - 2014-08-23
1 2012-03-12 - 2013-04-03
2 2014-10-16 - 2014-10-23
[3 rows x 1 columns]
the extraction part can be done by:
>>> cols = pd.MultiIndex.from_tuples([(x, y) for x in ['start', 'end'] for y in ['year', 'mon', 'day']])
>>> pat = r'(\d*)-(\d*)-(\d*) - (\d*)-(\d*)-(\d*)'
>>> xdf = pd.DataFrame(df.date.str.extract(pat).values, columns=cols, dtype=np.int64)
>>> xdf
start end
year mon day year mon day
0 2014 1 24 2014 8 23
1 2012 3 12 2013 4 3
2 2014 10 16 2014 10 23
[3 rows x 6 columns]
and if you want to concatenate with original data-frame:
>>> pd.concat([df, xdf], axis=1)
edit: seems .str.findall
would fit better:
>>> pd.DataFrame(df.date.str.findall('\d+').tolist(), dtype=np.int64, columns=cols)
start end
year mon day year mon day
0 2014 1 24 2014 8 23
1 2012 3 12 2013 4 3
2 2014 10 16 2014 10 23
[3 rows x 6 columns]