减去大熊猫时间戳;绝对值

时间:2015-08-05 15:32:05

标签: python pandas

我一直在尝试了解熊猫时间戳和timedeltas。我喜欢你如何使用它们,但是当我尝试减法时,我发现这有点奇怪:

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()?

1 个答案:

答案 0 :(得分:10)

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

所以有2个奇怪的'可能导致混淆的事情:

  • 如果时间为负数,则会获得timedelta.timedelta而不是seconds。这是因为只有-1 days +23:00:00部分可能是否定的。因此,负时间delta将始终定义为负天数,再次添加小时或秒以获得正确的值。因此,这为您提供了-01:00:00部分。
  • 秒数是小时,分钟和秒的总和。所以我们得到的days等于82800秒。

Bottomline是,timedelta的+23h属性不会给你秒数部分既不是总秒数(timedelta转换为秒数)。 所以在实践中,我认为你几乎不应该使用它。

要以秒为单位获取timedelta,您可以使用+23:00:00方法。如果我将负差异定义为.seconds

total_seconds