Python 在数据帧中减去两个datetime.time列

Python 在数据帧中减去两个datetime.time列,python,pandas,datetime,Python,Pandas,Datetime,数据帧df有两列,其中包含datetime.time对象,如下所示: TimeA TimeB 00:50:13 00:50:00 00:51:46 00:50:00 00:52:58 00:50:00 00:54:05 00:51:00 我想创建第三列,将这两个列区分开来。列中的元素是datetime.time对象。首先,我尝试了以下方法中的单个值: >from datetime import

数据帧df有两列,其中包含datetime.time对象,如下所示:

  TimeA           TimeB
  00:50:13        00:50:00
  00:51:46        00:50:00
  00:52:58        00:50:00
  00:54:05        00:51:00
我想创建第三列,将这两个列区分开来。列中的元素是datetime.time对象。首先,我尝试了以下方法中的单个值:

>from datetime import datetime, date, time
>TimeA = datetime.combine(datetime.min, df.iloc[0,0]) - datetime.min
>TimeB = datetime.combine(datetime.min, df.iloc[0,1]) - datetime.min
> diff = TimeA - TimeB
结果如下:

datetime.timedelta(0, 13)
但是,当我尝试转换整个列时:

df['TimeA_2'] = df['TimeA'].apply(lambda x : datetime.combine(date.min, x) - datetime.min)
出现以下错误:

combine() argument 2 must be datetime.time, not float
这没有意义,因为当我检查两列中元素的类型时,它们都是datetime.time。
我不知道,错误在哪里。非常感谢您的帮助。

您可以将列转换为
datetime
对象,然后将差值转换为分钟:

import numpy as np

df[['TimeA', 'TimeB']] = df[['TimeA', 'TimeB']].apply(pd.to_datetime)

#                 TimeA               TimeB
# 0 2018-03-05 00:50:13 2018-03-05 00:50:00
# 1 2018-03-05 00:51:46 2018-03-05 00:50:00
# 2 2018-03-05 00:52:58 2018-03-05 00:50:00
# 3 2018-03-05 00:54:05 2018-03-05 00:51:00

df['Diff'] = (df['TimeA'] - df['TimeB']) / np.timedelta64(1, 'm')

#                 TimeA               TimeB      Diff
# 0 2018-03-05 00:50:13 2018-03-05 00:50:00  0.216667
# 1 2018-03-05 00:51:46 2018-03-05 00:50:00  1.766667
# 2 2018-03-05 00:52:58 2018-03-05 00:50:00  2.966667
# 3 2018-03-05 00:54:05 2018-03-05 00:51:00  3.083333

IIUC使用
pd.\u timedelta

df[['TimeA','TimeB']] = df[['TimeA','TimeB']].apply(pd.to_timedelta)
df['Diff'] = (df['TimeA'] - df['TimeB'])
输出:

     TimeA    TimeB     Diff
0 00:50:13 00:50:00 00:00:13
1 00:51:46 00:50:00 00:01:46
2 00:52:58 00:50:00 00:02:58
3 00:54:05 00:51:00 00:03:05
     TimeA    TimeB      Diff
0 00:50:13 00:50:00  0.216667
1 00:51:46 00:50:00  1.766667
2 00:52:58 00:50:00  2.966667
3 00:54:05 00:51:00  3.083333

输出:

     TimeA    TimeB     Diff
0 00:50:13 00:50:00 00:00:13
1 00:51:46 00:50:00 00:01:46
2 00:52:58 00:50:00 00:02:58
3 00:54:05 00:51:00 00:03:05
     TimeA    TimeB      Diff
0 00:50:13 00:50:00  0.216667
1 00:51:46 00:50:00  1.766667
2 00:52:58 00:50:00  2.966667
3 00:54:05 00:51:00  3.083333