Parse the datetimes on the read in (the list of list parses a date and time in separate columns (note that this skips the header from above for simplicity)
In [23]: df = read_csv(StringIO(data),sep='\s+',header=None,parse_dates=[[0,1],[2,3],[4,5],[6,7]])
In [24]: df.columns = ['date1','date2','date3','date4']
In [25]: df
Out[25]:
date1 date2 date3 date4
0 2014-03-21 16:17:00 2014-03-21 15:40:00 2014-03-21 14:55:00 2014-03-21 12:50:00
1 2014-03-21 16:29:00 2014-03-21 16:26:00 2014-03-21 16:23:00 2014-03-21 16:21:00
2 2012-04-07 13:43:00 2012-04-07 13:37:00 2012-04-07 13:34:00 2012-04-07 13:29:00
3 2014-03-19 01:41:00 2014-03-18 01:19:00 2014-03-17 00:50:00 2014-05-03 22:30:00
4 2010-01-21 17:22:00 2010-01-21 17:21:00 2010-01-21 17:21:00 2010-01-21 17:21:00
[5 rows x 4 columns]
Timedeltas are straightforward
In [26]: DataFrame(dict(td1 = df['date1']-df['date2'], td2 = df['date2']-df['date3'], td3=df['date3']-df['date4']))
Out[26]:
td1 td2 td3
0 0 days, 00:37:00 0 days, 00:45:00 0 days, 02:05:00
1 0 days, 00:03:00 0 days, 00:03:00 0 days, 00:02:00
2 0 days, 00:06:00 0 days, 00:03:00 0 days, 00:05:00
3 1 days, 00:22:00 1 days, 00:29:00 -47 days, 21:40:00
4 0 days, 00:01:00 0 days, 00:00:00 0 days, 00:00:00
[5 rows x 3 columns]