Pandas 计算DateTimeIndex的时差

Pandas 计算DateTimeIndex的时差,pandas,Pandas,我想计算DateTimeIndex中时间之间的时差 import pandas as pd p = pd.DatetimeIndex(['1985-11-14', '1985-11-28', '1985-12-14', '1985-12-28'], dtype='datetime64[ns]') 我可以计算两次的时差: p[1] - p[0] 给予 但是p[1:]-p[:-1]不起作用,并且给出 DatetimeIndex(['1985-12-28'], dtype='datetime64[

我想计算DateTimeIndex中时间之间的时差

import pandas as pd
p = pd.DatetimeIndex(['1985-11-14', '1985-11-28', '1985-12-14', '1985-12-28'], dtype='datetime64[ns]')
我可以计算两次的时差:

p[1] - p[0]
给予

但是p[1:]-p[:-1]不起作用,并且给出

DatetimeIndex(['1985-12-28'], dtype='datetime64[ns]', freq=None)
以及未来的警告:

FutureWarning: using '-' to provide set differences with datetimelike Indexes is deprecated, use .difference()

有没有想过如何(轻松地)计算DateTimeIndex中值之间的时间差?为什么它只适用于1个值,而不适用于整个DateTimeIndex?

操作符正在工作,它只是没有达到您期望的效果。在第二种情况下,它的作用是给出两个日期时间索引的差值,即
p[1://code>中的值,但不在
p[:-1]

可能有更好的解决方案,但在执行操作元素时会起作用:

[e - k for e,k in zip(p[1:], p[:-1])]

使用将
日期时间索引
转换为
系列
,然后调用以计算行间差异:

In [5]:
p.to_series().diff()

Out[5]:
1985-11-14       NaT
1985-11-28   14 days
1985-12-14   16 days
1985-12-28   14 days
dtype: timedelta64[ns]
至于失败的原因,这里的
-
操作符试图对不同的索引范围执行设置差分或交集,您试图从一个范围减去另一个范围的值,而
diff
就是这样做的


当你做
p[1]
-
p[0]
时,
-
是在执行标量减法,但当你对索引执行此操作时,它认为你在执行一个集合操作

我使用
来填充第一个差分值,但我相信你能想出如何处理这种情况

>>> [None] + [p[n] - p[n-1] for n in range(1, len(p))]
[None,
 Timedelta('14 days 00:00:00'),
 Timedelta('16 days 00:00:00'),
 Timedelta('14 days 00:00:00')]
顺便说一句,要获得日差:

[None] + [(p[n] - p[n-1]).days for n in range(1, len(p))]
[None, 14, 16, 14]
[None] + [(p[n] - p[n-1]).days for n in range(1, len(p))]
[None, 14, 16, 14]