同様の日時インデックスのデータを含む4つのデータフレームがありますが、それぞれに欠落している行がほとんどなく、以前の既知のデータを使用してギャップを埋めることができることがわかっています。
これらのデータフレームを「整列」して、すべてのデータフレームのインデックスを結合し、欠損値を埋めたいと思います。私は2つのデータフレームに対してそれを行う方法を知っています: df1, df2 = df1.align(df2, axis=0, method='pad')
、しかし2つ以上に対してそれを行う良い方法は何ですか?
私はこれを試しましたが、うまくいきます:
df1 = pd.DataFrame({'values': 1}, index=pd.DatetimeIndex(['2016-06-01', '2016-06-03']))
df2 = pd.DataFrame({'values': 2}, index=pd.DatetimeIndex(['2016-06-02', '2016-06-04', '2016-06-07']))
df3 = pd.DataFrame({'values': 3}, index=pd.DatetimeIndex(['2016-06-01', '2016-06-05']))
commonIndex = df1.index.join(df2.index, how='outer').join(df3.index, how='outer')
for d in [df1, df2, df3]:
d = d.reindex(index=commonIndex, method='pad')
ただし、実際のデータで同じアプローチを試みると、「ValueError: インデックスは単調に増加または減少する必要があります」というエラーが発生します。これは価格データであり、インデックスは次のようになります。
DatetimeIndex(['2014-03-24 00:00:00', '2014-03-24 00:01:00',
'2014-03-24 00:02:00', '2014-03-24 00:03:00',
'2014-03-24 00:04:00', '2014-03-24 00:05:00',
'2014-03-24 00:06:00', '2014-03-24 00:07:00',
'2014-03-24 00:08:00', '2014-03-24 00:09:00',
...
'2014-10-10 17:51:00', '2014-10-10 17:52:00',
'2014-10-10 17:53:00', '2014-10-10 17:54:00',
'2014-10-10 17:55:00', '2014-10-10 17:56:00',
'2014-10-10 17:57:00', '2014-10-10 17:58:00',
'2014-10-10 17:59:00', '2014-10-10 18:00:00'],
dtype='datetime64[ns]', name=u'datetime', length=139671, freq=None)
私が理解している限り、それは増加しているはずです。「単調」についてはわかりませんが、上記の例で示されているように、制約ではないと想定しました(まだ日付がありませんでした)。
正しい用語を使用していない場合はご容赦ください。
PSデータフレームのリストを繰り返し処理すると、再インデックスを適用した後、実際にはdf1、df2、df3に保存されていないように見えます。どうすれば修正できますか?