Pandas 的负时差

Myk*_*tko 9 python timestamp time-series timedelta pandas

我通过减去较早的时间戳为较晚的时间戳得到了这个奇怪的结果:

pd.to_datetime('2021-05-21 06:00:00') - pd.to_datetime('2021-05-21 06:02:00')
Run Code Online (Sandbox Code Playgroud)

输出:

Timedelta('-1 days +23:58:00')
Run Code Online (Sandbox Code Playgroud)

预期输出:

Timedelta('-0 days 00:02:00')
Run Code Online (Sandbox Code Playgroud)

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

Hal*_*Ali 6

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)
Run Code Online (Sandbox Code Playgroud)

这是因为差异被正确计算为-120 seconds,但单个时间元素不能超过它们的模数。timedelta 分量已标准化。为了表示负 2 分钟,使用负日和正时间分量。

来自 python datetime 模块的文档

然后将天、秒和微秒标准化,以便表示是唯一的,其中

  • 0 <= 微秒 < 1000000
  • 0 <= 秒 < 3600*24(一天的秒数)
  • -999999999 <= 天 <= 999999999

请注意,负值的标准化一开始可能会令人惊讶。例如:

from datetime import timedelta
d = timedelta(microseconds=-1)
(d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)
Run Code Online (Sandbox Code Playgroud)

可以使用该方法将总秒数检索为负整数Timedelta.total_seconds


WeN*_*Ben 5

我们可以做的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
Run Code Online (Sandbox Code Playgroud)