【发布时间】:2013-01-09 00:42:07
【问题描述】:
我是 Pandas 和 Zipline 的新手,我正在尝试学习如何使用它们(并将它们与我拥有的这些数据一起使用)。任何类型的提示,即使没有完整的解决方案,也将不胜感激。我已经尝试了很多事情,并且已经非常接近,但遇到了索引问题,特别是Exception: Reindexing only valid with uniquely valued Index objects。 [熊猫 0.10.0,Python 2.7]
我正在尝试将我在 postgres 中的数千只股票的月度回报数据转换为以下形式:
ticker_symbol :: String, monthly_return :: Float, date :: Timestamp
例如
AAPL, 0.112, 28/2/1992
GS, 0.13, 30/11/1981
GS, -0.23, 22/12/1981
注意:报告的频率是每月一次,但这里会有相当多的 NaN 数据,因为并非我在这里拥有的 6000 多家公司都会同时出现。
...到下面描述的形式,这是 Zipline 运行其回测器所需要的。 (我想。Zipline 的回测器可以轻松地处理这样的月度数据吗?我知道可以,但是有什么技巧吗?)
下面是一个DataFrame(时间序列的?怎么说呢?),格式是我需要的:
> data:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 2268 entries, 1993-01-04 00:00:00+00:00 to 2001-12-31 00:00:00+00:00
Data columns:
AA 2268 non-null values
AAPL 2268 non-null values
GE 2268 non-null values
IBM 2268 non-null values
JNJ 2268 non-null values
KO 2268 non-null values
MSFT 2268 non-null values
PEP 2268 non-null values
SPX 2268 non-null values
XOM 2268 non-null values
dtypes: float64(10)
下面是一个时间序列,是我需要的格式。
> data.AAPL:
Date
1993-01-04 00:00:00+00:00 73.00
1993-01-05 00:00:00+00:00 73.12
...
2001-12-28 00:00:00+00:00 36.15
2001-12-31 00:00:00+00:00 35.55
Name: AAPL, Length: 2268
注意,这里没有返回数据,而是价格。它们被调整(通过 Zipline 的load_from_yahoo——尽管,从阅读源代码,实际上是通过 pandas 中的函数)针对股息、拆分等进行调整,因此在它和我的返回数据之间存在同构(减去初始价格)(所以,这里没问题)。
(编辑:如果您希望我写下我所拥有的,或者附上我的 iPython 笔记本或要点,请告诉我;我只是怀疑它是否会有所帮助,但如果需要,我绝对可以做到。)
【问题讨论】: