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>Convertcreated\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数组并在那里执行操作。首先,创建一个dtypedatetime64[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不支持的操作数类型usedf[“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']