Python 在数据帧中减去两个datetime.time列
数据帧df有两列,其中包含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
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