我设法加载了大量金融工具数据系列的历史数据,按日期索引。
我正在绘制数量,价格信息,没有任何问题。
我现在想要实现的是确定日期是否有大的跳跃,看看我是否遗漏了大块数据。
我想到的想法是以某种方式绘制索引中两个连续日期之间的差异,如果该数字优于 3 或 4(大于周末和周五或周一的银行假期),那么就在那里是一个问题。
问题是我可以弄清楚如何简单地计算 df[next day]-df[day],其中 df 按天索引
您可以使用shift
Series方法(注意 DatetimeIndex 方法按频率移动):
In [11]: rng = pd.DatetimeIndex(['20120101', '20120102', '20120106']) # DatetimeIndex like df.index
In [12]: s = pd.Series(rng) # df.index instead of rng
In [13]: s - s.shift()
Out[13]:
0 NaT
1 1 days, 00:00:00
2 4 days, 00:00:00
dtype: timedelta64[ns]
In [14]: s - s.shift() > pd.offsets.Day(3).nanos
Out[14]:
0 False
1 False
2 True
dtype: bool
根据您的需要,也许您可以做任何事情,或者找到有问题的值......
In [15]: (s - s.shift() > pd.offsets.Day(3).nanos).any()
Out[15]: True
In [16]: s[s - s.shift() > pd.offsets.Day(3).nanos]
Out[16]:
2 2012-01-06 00:00:00
dtype: datetime64[ns]
或者也许找到最大跳跃(以及它在哪里):
In [17]: (s - s.shift()).max() # it's weird this returns a Series...
Out[17]:
0 4 days, 00:00:00
dtype: timedelta64[ns]
In [18]: (s - s.shift()).idxmax()
Out[18]: 2
如果您真的想绘制此图,只需绘制差异即可:
(s - s.shift()).plot()