我一直在尝试了解熊猫的时间戳和时间点.我喜欢你如何使用它们,但在尝试减法时我发现这有点奇怪:
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()?
jor*_*ris 13
这种看似奇怪/错误的行为的原因是.secondsa 的属性timedelta(for pandas.Timedelta,但这是从标准库中继承的timedelta.timedelta)是非常不明确的.
timedelta存储在3个部分中:天,秒,微秒(https://docs.python.org/2/library/datetime.html#timedelta-objects).所以它seconds是小时,分钟和秒的总和(以秒为单位).
所以有2个'奇怪'的东西会导致混乱:
-1 days +23:00:00而不是-01:00:00.这是因为只有days部分可以是负数.因此,负时间delta将始终定义为负天数,再次添加小时或秒以获得正确的值.所以这给了你一个+23h部分.+23:00:00我们得到的等于82800秒.底线是,.secondstimedelta 的属性不会给你秒数部分既不是总秒数(timedelta转换为秒数).所以在实践中,我认为你几乎不应该使用它.
要以秒为单位获取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
| 归档时间: | 
 | 
| 查看次数: | 3024 次 | 
| 最近记录: |