Pandas 中的负时差
Negative time difference in Pandas
我通过将较早的时间戳减去较晚的时间戳得到了这个奇怪的结果:
pd.to_datetime('2021-05-21 06:00:00') - pd.to_datetime('2021-05-21 06:02:00')
输出:
Timedelta('-1 days +23:58:00')
预期输出:
Timedelta('-0 days 00:02:00')
计算负时差的正确方法是什么?谢谢!
我们可以total_seconds
(pd.to_datetime('2021-05-21 06:00:00') - pd.to_datetime('2021-05-21 06:02:00')).total_seconds()
Out[9]: -120.0
使用abs
获取时间增量:
>>> abs(pd.to_datetime('2021-05-21 06:00:00') - pd.to_datetime('2021-05-21 06:02:00'))
Timedelta('0 days 00:02:00')
Timedelta('-1 days +23:58:00')
是 pandas(以及纯python)
中负时差的正确表示]
# using pure python
from datetime import datetime
datetime(2021,5,21,6,0,0) - datetime(2021,5,21,6,2,0)
datetime.timedelta(days=-1, seconds=86280)
这是因为差异被正确计算为 -120 seconds
,但各个时间元素不能超过它们的 moduli。 timedelta 组件被归一化。为了表示负 2 分钟,使用负日和正时间分量。
from the python datetime module's documentation
and days, seconds and microseconds are then normalized so that the representation is unique, with
- 0 <= microseconds < 1000000
- 0 <= seconds < 3600*24 (the number of seconds in one day)
- -999999999 <= days <= 999999999
Note that normalization of negative values may be surprising at first. For example:
from datetime import timedelta
d = timedelta(microseconds=-1)
(d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)
可以使用 Timedelta.total_seconds
方法将总秒数检索为负整数
好吧,您的代码给出了正确的输出...
你的结果是 Timedelta('-1 days +23:58:00')
等于 -24:00:00 + 23:58:00
=> 2 mins
您可以使用 np.timedelta64
将时间增量更改为您想要的输出
正如其他人所说,pandas 否定 Timedelta
对象是 python 中的正确输出。
import numpy as np
delta = pd.to_datetime('2021-05-21 06:00:00') - pd.to_datetime('2021-05-21 06:02:00')
print(delta)
Timedelta('-1 days +23:58:00')
#minutes
print(delta / np.timedelta64(1,'m')
-2.0
#seconds
delta / np.timedelta64(1,'s')
-120.0
我通过将较早的时间戳减去较晚的时间戳得到了这个奇怪的结果:
pd.to_datetime('2021-05-21 06:00:00') - pd.to_datetime('2021-05-21 06:02:00')
输出:
Timedelta('-1 days +23:58:00')
预期输出:
Timedelta('-0 days 00:02:00')
计算负时差的正确方法是什么?谢谢!
我们可以total_seconds
(pd.to_datetime('2021-05-21 06:00:00') - pd.to_datetime('2021-05-21 06:02:00')).total_seconds()
Out[9]: -120.0
使用abs
获取时间增量:
>>> abs(pd.to_datetime('2021-05-21 06:00:00') - pd.to_datetime('2021-05-21 06:02:00'))
Timedelta('0 days 00:02:00')
Timedelta('-1 days +23:58:00')
是 pandas(以及纯python)
# using pure python
from datetime import datetime
datetime(2021,5,21,6,0,0) - datetime(2021,5,21,6,2,0)
datetime.timedelta(days=-1, seconds=86280)
这是因为差异被正确计算为 -120 seconds
,但各个时间元素不能超过它们的 moduli。 timedelta 组件被归一化。为了表示负 2 分钟,使用负日和正时间分量。
from the python datetime module's documentation
and days, seconds and microseconds are then normalized so that the representation is unique, with
- 0 <= microseconds < 1000000
- 0 <= seconds < 3600*24 (the number of seconds in one day)
- -999999999 <= days <= 999999999
Note that normalization of negative values may be surprising at first. For example:
from datetime import timedelta
d = timedelta(microseconds=-1)
(d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)
可以使用 Timedelta.total_seconds
好吧,您的代码给出了正确的输出...
你的结果是 Timedelta('-1 days +23:58:00')
等于 -24:00:00 + 23:58:00
=> 2 mins
您可以使用 np.timedelta64
将时间增量更改为您想要的输出
正如其他人所说,pandas 否定 Timedelta
对象是 python 中的正确输出。
import numpy as np
delta = pd.to_datetime('2021-05-21 06:00:00') - pd.to_datetime('2021-05-21 06:02:00')
print(delta)
Timedelta('-1 days +23:58:00')
#minutes
print(delta / np.timedelta64(1,'m')
-2.0
#seconds
delta / np.timedelta64(1,'s')
-120.0