我一直在尝试了解熊猫时间戳和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()?
答案 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