我知道可以用periods
参数进行抵消,但是如何回归每月传播的每日价格数据(例如交易日)?
示例数据是:
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天等等。我知道必须有一种简单的方法来使用熊猫来做到这一点。
答案 0 :(得分:10)
您可以将数据重新采样为营业月份。如果您不想要平均价格(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
答案 1 :(得分:0)
在使用pct_change函数时,我也偶然发现了这个错误,并想在这个问题上提供2美分。
pct_change函数的freq参数似乎只接受固定时间的时间偏移,例如“ 2D”和“ 3D”。但是,“ M”是不确定的时间段,范围在28天到31天之间。这就是错误的来源。
Pct_change的操作类似于rolling()函数,并且将“ M”时间偏移量与rolling()一起使用会得到相同的错误。
这是在pct_change参数中使用freq参数的有效示例:
将pandas_datareader.data导入为网络
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
...