11

議論で相殺することは可能ですがperiods、1か月(取引日など)に分散する日次価格データをどのようにリターン化するのでしょうか。

データの例は次のとおりです。

In [1]: df.AAPL
2009-01-02 16:00:00    90.36
2009-01-05 16:00:00    94.18
2009-01-06 16:00:00    92.62
2009-01-07 16:00:00    90.62
2009-01-08 16:00:00    92.30
2009-01-09 16:00:00    90.19
2009-01-12 16:00:00    88.28
2009-01-13 16:00:00    87.34
2009-01-14 16:00:00    84.97
2009-01-15 16:00:00    83.02
2009-01-16 16:00:00    81.98
2009-01-20 16:00:00    77.87
2009-01-21 16:00:00    82.48
2009-01-22 16:00:00    87.98
2009-01-23 16:00:00    87.98
...
2009-12-10 16:00:00    195.59
2009-12-11 16:00:00    193.84
2009-12-14 16:00:00    196.14
2009-12-15 16:00:00    193.34
2009-12-16 16:00:00    194.20
2009-12-17 16:00:00    191.04
2009-12-18 16:00:00    194.59
2009-12-21 16:00:00    197.38
2009-12-22 16:00:00    199.50
2009-12-23 16:00:00    201.24
2009-12-24 16:00:00    208.15
2009-12-28 16:00:00    210.71
2009-12-29 16:00:00    208.21
2009-12-30 16:00:00    210.74
2009-12-31 16:00:00    209.83
Name: AAPL, Length: 252

ご覧のとおり、タイムスタンプデータにギャップがあり、毎月が30日ではないなどの理由で、30だけオフセットしても、正しい結果は得られません。パンダを使用してこれを行う簡単な方法があるはずです。

4

2 に答える 2

18

データを営業月にリサンプリングできます。平均価格(のデフォルトresample)が必要ない場合は、キーワード引数を使用してカスタムのリサンプルメソッドを使用できますhow

In [31]: from pandas.io import data as web

# read some example data, note that this is not exactly your data!
In [32]: s = web.get_data_yahoo('AAPL', start='2009-01-02',
...                             end='2009-12-31')['Adj Close']

# resample to business month and return the last value in the period
In [34]: monthly = s.resample('BM', how=lambda x: x[-1])

In [35]: monthly
Out[35]: 
Date
2009-01-30     89.34
2009-02-27     88.52
2009-03-31    104.19
...
2009-10-30    186.84
2009-11-30    198.15
2009-12-31    208.88
Freq: BM

In [36]: monthly.pct_change()
Out[36]: 
Date
2009-01-30         NaN
2009-02-27   -0.009178
2009-03-31    0.177022
...
2009-10-30    0.016982
2009-11-30    0.060533
2009-12-31    0.054151
Freq: BM
于 2012-12-26T10:54:56.750 に答える
2

pct_change関数を使用しているときにもこのエラーに遭遇しました。この質問に対して、2セントを提供したいと思います。

pct_change関数のfreq引数は、「2D」や「3D」などの固定期間の時間オフセットのみを受け入れるようです。ただし、「M」は無期限であり、28日から31日の範囲である可能性があります。ここからエラーが発生します。

Pct_changeはrolling()関数と同様に動作し、rolling()で「M」時間オフセットを使用すると同じエラーが発生します。

pct_change引数でfreq引数を使用した実際の例を次に示します。

pandas_datareader.dataをWebとしてインポートします

return.pct_change(periods = 1, freq = '2D')

Date
2008-03-26         NaN
2008-03-27         NaN
2008-03-28   -0.010342
2008-03-31         NaN
2008-04-01         NaN
            ...   
于 2020-06-26T01:46:32.707 に答える