Python 日期列减法

Python 日期列减法,python,datetime,pandas,Python,Datetime,Pandas,我有一个像这样的熊猫数据框 created_time reached_time 2016-01-02 12:57:44 14:20:22 2016-01-02 12:57:44 13:01:38 2016-01-03 10:38:51 12:24:07 2016-01-03 10:38:51 12:32:11 2016-01-03 10:38:52 12:23:20 2016-01-03 10:38:52 12:51:3

我有一个像这样的熊猫数据框

       created_time  reached_time
2016-01-02 12:57:44      14:20:22
2016-01-02 12:57:44      13:01:38
2016-01-03 10:38:51      12:24:07
2016-01-03 10:38:51      12:32:11
2016-01-03 10:38:52      12:23:20
2016-01-03 10:38:52      12:51:34
2016-01-03 10:38:52      12:53:33
2016-01-03 10:38:52      13:04:08
2016-01-03 10:38:52      13:13:40
我想减去这两个日期列,得到
time

我正在用python做以下工作

speed['created_time'].dt.time - speed['reached_time']
但它给了我以下的错误


TypeError:ufunc subtract不能使用dtype('O')和dtype('p>Convert
created\u time
column to datetime first)类型的操作数:

df["created_time"] = pd.to_datetime(df["created_time"])

然后使用
df[“created_time”]-df[“created_time”].dt.normalize()
timedelta
类型获取时间部分。

您可以下拉到NumPy数组并在那里执行操作。首先,创建一个dtype
datetime64[D]
的日期数组:

dates = speed['created_time'].values.astype('datetime64[D]')
然后您有两个选项:您可以将到达时间转换为日期,并从日期中减去日期:

speed['reached_date'] = dates + speed['reached_time'].values
speed['diff'] = speed['created_time'] - speed['reached_date']
或者您可以将创建的时间转换为时间增量,并从时间增量中减去时间增量:

speed['created_delta'] = speed['created_time'].values - dates
speed['diff'] = speed['created_delta'] - speed['reached_time']

屈服

         created_time  reached_time        reached_date              diff
0 2016-01-02 12:57:44      14:20:22 2016-01-02 14:20:22 -1 days +22:37:22
1 2016-01-02 12:57:44      13:01:38 2016-01-02 13:01:38 -1 days +23:56:06
2 2016-01-03 10:38:51      12:24:07 2016-01-03 12:24:07 -1 days +22:14:44
3 2016-01-03 10:38:51      12:32:11 2016-01-03 12:32:11 -1 days +22:06:40
4 2016-01-03 10:38:52      12:23:20 2016-01-03 12:23:20 -1 days +22:15:32
5 2016-01-03 10:38:52      12:51:34 2016-01-03 12:51:34 -1 days +21:47:18
6 2016-01-03 10:38:52      12:53:33 2016-01-03 12:53:33 -1 days +21:45:19
7 2016-01-03 10:38:52      13:04:08 2016-01-03 13:04:08 -1 days +21:34:44
8 2016-01-03 10:38:52      13:13:40 2016-01-03 13:13:40 -1 days +21:25:12

使用,您可以进行计算,而无需下拉到NumPy数组(即,无需访问
。value
):


我这样做了,但仍然给了我一个错误
TypeError:datetime.time和datetime.time不支持的操作数类型
use
df[“created\u time”]-df[“created\u time”].dt.normalize()
获取时间部分。请发布
speed.info()
。如果可以使用
speed[“created\u time”].dt
,那么我认为
speed['created_time']
的数据类型必须是
datetime64[ns]
,而不是
'O'
create_time
到达日期之前。
从较早的日期时间减去较晚的日期时间会产生负的时间增量。如果想要正的时间增量,请使用
speed['reacted\u date']-速度['created\u time']
         created_time  reached_time        reached_date              diff
0 2016-01-02 12:57:44      14:20:22 2016-01-02 14:20:22 -1 days +22:37:22
1 2016-01-02 12:57:44      13:01:38 2016-01-02 13:01:38 -1 days +23:56:06
2 2016-01-03 10:38:51      12:24:07 2016-01-03 12:24:07 -1 days +22:14:44
3 2016-01-03 10:38:51      12:32:11 2016-01-03 12:32:11 -1 days +22:06:40
4 2016-01-03 10:38:52      12:23:20 2016-01-03 12:23:20 -1 days +22:15:32
5 2016-01-03 10:38:52      12:51:34 2016-01-03 12:51:34 -1 days +21:47:18
6 2016-01-03 10:38:52      12:53:33 2016-01-03 12:53:33 -1 days +21:45:19
7 2016-01-03 10:38:52      13:04:08 2016-01-03 13:04:08 -1 days +21:34:44
8 2016-01-03 10:38:52      13:13:40 2016-01-03 13:13:40 -1 days +21:25:12
dates = speed['created_time'].dt.normalize()
speed['reached_date'] = dates + speed['reached_time']
speed['diff'] = speed['created_time'] - speed['reached_date']