如何解决熊猫的负时差
通过为后面的时间戳减去较早的时间戳,我得到了这个奇怪的结果:
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')
计算负时差的正确方法是什么?谢谢!
解决方法
Timedelta('-1 days +23:58:00')
是pandas(以及纯python)中负时间差的正确表示
# using pure python
from datetime import datetime
datetime(2021,5,21,6,0) - datetime(2021,2,0)
datetime.timedelta(days=-1,seconds=86280)
这是因为差值被正确计算为 -120 seconds
,但单个时间元素不能超过它们的模数。 timedelta 分量被归一化。为了表示负的 2 分钟,使用负的日期和正的时间分量。
from the python datetime module's documentation
然后将天、秒和微秒归一化,以便表示是唯一的,其中
- 0
- 0
- -999999999
请注意,负值的归一化起初可能会令人惊讶。例如:
from datetime import timedelta
d = timedelta(microseconds=-1)
(d.days,d.seconds,d.microseconds)
(-1,86399,999999)
可以使用方法 Timedelta.total_seconds
使用 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')
等于 -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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。