熊猫的负时差

Posted

技术标签:

【中文标题】熊猫的负时差【英文标题】:Negative time difference in Pandas 【发布时间】:2021-08-10 17:38:57 【问题描述】:

我通过将较早的时间戳减去后面的时间戳得到这个奇怪的结果:

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')

计算负时差的正确方法是什么?谢谢!

【问题讨论】:

请用 pandas 版本更新您的问题 你期待什么结果? @Umar.H 我的意思是我希望 - 2 分钟,而不是 - 2 天。 这给出了正确的输出......你的结果是Timedelta('-1 days +23:58:00')等于-24:00:00 + 23:58:00 => 2 mins @MykolaZotko.. 我就是这么做的 【参考方案1】:

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,但单个时间元素不能超过它们的模数。 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 方法将总秒数检索为负整数

【讨论】:

【参考方案2】:

我们可以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

【讨论】:

能否解释一下默认行为。 我可以想象会发生这样的事情:timedelta 对象计算完整的一天,然后将小时数:分钟:秒添加到该值。这在技术上是正确的,但很难看。只是一个观察。【参考方案3】:

使用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')

【讨论】:

请注意,这是不正确的增量,OP 很好奇如何将增量表示为 0 days -00:02:00'【参考方案4】:

你的代码给出了正确的输出...... 你的结果是Timedelta('-1 days +23:58:00') 等于-24:00:00 + 23:58:00 => 2 mins

【讨论】:

【参考方案5】:

您可以使用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

【讨论】:

以上是关于熊猫的负时差的主要内容,如果未能解决你的问题,请参考以下文章

如何根据熊猫的时差为用户设置会话

Python - 替换熊猫数据框中的负无穷大值[重复]

如何使用熊猫来加快这个嵌套循环的速度?

熊猫中的 Xlsxwriter 和熊猫锁定之外

来自熊猫数据框嵌套字典的熊猫数据框

将字典的特定字典转换为熊猫数据框 - 熊猫 [重复]