1

私は、日付によって索引付けされた、金融商品の大規模なセットに関するデータ シリーズの履歴データをロードすることができました。

問題なくボリューム、価格情報をプロットしています。

私が今達成したいのは、日付に大きなジャンプがあるかどうかを判断し、大量のデータが欠落しているかどうかを確認することです.

私が念頭に置いていたアイデアは、どういうわけかインデックス内の 2 つの連続した日付の差をプロットすることでした。その数が 3 または 4 よりも大きい場合 (これは週末よりも大きく、金曜または月曜の銀行休業日よりも大きい)、そこにが問題です。

問題は、単純に df[next day]-df[day] を計算する方法を理解できることです。ここで、df は日ごとにインデックス付けされます

4

1 に答える 1

2

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()
于 2013-07-31T11:19:27.123 に答える