gpt4 book ai didi

python - 将财务数据从 postgres 转换为 pandas 数据框以与 Zipline 一起使用

转载 作者:太空狗 更新时间:2023-10-30 00:11:31 25 4
gpt4 key购买 nike

我是 Pandas 和 Zipline 的新手,我正在尝试学习如何使用它们(并将它们与我拥有的这些数据一起使用)。任何类型的提示,即使没有完整的解决方案,也将不胜感激。我已经尝试了很多事情,并且已经非常接近了,但是遇到了索引问题,特别是 Exception: Reindexing only valid with uniquely valued Index objects。 [ Pandas 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(时间序列的?这个怎么说?),格式是我需要的:

>数据:

<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)

下面是一个TimeSeries,是我需要的格式。

>数据.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 笔记本或要点,请告诉我;我只是怀疑它是否有帮助,但如果需要,我绝对可以做到。)

最佳答案

我怀疑您试图将日期设置为过早的索引。我的建议是先set_index作为日期公司名称,那么您可以unstack公司名称和resample .

像这样:

In [11]: df1
Out[11]:
ticker_symbol monthly_return date
0 AAPL 0.112 1992-02-28 00:00:00
1 GS 0.130 1981-11-30 00:00:00
2 GS -0.230 1981-12-22 00:00:00

df2 = df2.set_index(['date','ticker_symbol'])
df3 = df2.unstack(level=1)
df4 = df.resample('M')

In [14]: df2
Out[14]:
monthly_return
date ticker_symbol
1992-02-28 AAPL 0.112
1981-11-30 GS 0.130
1981-12-22 GS -0.230

In [15]: df3
Out[15]:
monthly_return
ticker_symbol AAPL GS
date
1981-11-30 NaN 0.13
1981-12-22 NaN -0.23
1992-02-28 0.112 NaN

In [16]: df4
Out[16]:
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 124 entries, 1981-11-30 00:00:00 to 1992-02-29 00:00:00
Freq: M
Data columns:
(monthly_return, AAPL) 1 non-null values
(monthly_return, GS) 2 non-null values
dtypes: float64(2)

关于python - 将财务数据从 postgres 转换为 pandas 数据框以与 Zipline 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14515239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com