gpt4 book ai didi

python - 减去 Pandas 时间戳;绝对值

转载 作者:太空狗 更新时间:2023-10-29 18:04:30 26 4
gpt4 key购买 nike

我一直在努力尝试理解 pandas 时间戳和时间增量。我喜欢你使用它们的方式,但在尝试减法时我发现这有点奇怪:

now = pd.Timestamp('now')
then = now - pd.to_timedelta('1h')

print (now - then)
print (then - now)
print ((now - then).seconds)
print ((then - now).seconds)

结果:

0 days 01:00:00
-1 days +23:00:00
3600
82800

a) 我应该如何理解这种行为?

b) 有没有办法得到时间戳差的绝对值,相当于abs()?

最佳答案

造成这种看似奇怪/错误行为的原因是 timedelta.seconds 属性(对于 pandas.Timedelta,但这是继承自标准库的timedelta.timedelta) 很含糊。
timedelta 存储在 3 个部分:天、秒、微秒 ( https://docs.python.org/2/library/datetime.html#timedelta-objects )。所以 seconds 是小时、分钟和秒(以秒为单位)的总和。

所以有 2 种“奇怪”的东西会导致混淆:

  • 当时间增量为负时,您得到 -1 天 +23:00:00 而不是 -01:00:00。这是因为只有 days 部分可以为负数。因此,负的 timedelta 将始终被定义为负天数,并再次添加小时或秒以获得正确的值。所以这为您提供了 +23h 部分。
  • 秒是小时、分钟和秒的总和。所以我们得到的+23:00:00等于82800秒。

底线是,timedelta 的 .seconds 属性不会为您提供秒部分,也不会提供总秒数(timedelta 转换为秒数)。 所以在实践中,我认为您几乎不应该使用它。

要获取以秒为单位的时间增量,可以使用total_seconds 方法。如果我将负差异定义为 diff = then - now:

In [12]: diff
Out[12]: Timedelta('-1 days +23:00:00')

In [13]: diff.seconds
Out[13]: 82800

In [14]: diff.total_seconds()
Out[14]: -3600.0

关于python - 减去 Pandas 时间戳;绝对值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31836788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com