我已经搜索了互连网,但似乎无法弄清楚该怎么做。
import pandas as pd
import pandas_datareader.data as pdr
from datetime import datetime
asset_list = ['AAPL', 'FB', 'NFLX']
start = datetime(2018, 11, 1)
end = datetime(2018, 11, 25)
data = pdr.DataReader(asset_list, 'iex', start, end)
这将返回一个字典,其中包含由每种股票表示的键,“开盘价”,“高价”,“低价”,“收盘价”和“交易量”列以及开始日期和结束日期之间的每个日期的行。
print(data)
{'AAPL': open high low close volume
date
2018-11-21 179.73 180.270 176.55 176.78 31124210
2018-11-23 174.94 176.595 172.10 172.29 23623972, 'FB':
open high low close volume
date
2018-11-21 134.40 137.19 134.1300 134.82 25469735
2018-11-23 133.65 134.50 131.2551 131.73 11886128, 'NFLX':
open high low close volume
date
2018-11-21 274.42 275.34 261.51 262.13 11023037
2018-11-23 260.11 265.50 256.84 258.82 5245123}
和
type(data)
dict
我想要的是一个数据框,该数据框具有代表每个股票的列和代表这些股票在开始和结束日期之间的每个日期的收盘价的行。
类似这样的东西:
Date stock1 stock2 stock3 stock4
11/25/2013 ClosePrice ClosePrice ClosePrice ClosePrice
11/26/2013 ClosePrice ClosePrice ClosePrice ClosePrice
11/27/2013 ClosePrice ClosePrice ClosePrice ClosePrice
etc...
很抱歉,如果没有正确询问,但这是我的第一篇文章,我是新手,所以在此先感谢社区的耐心和帮助!
EDIT
使用下面的Kevin Fang的答案(这正是我想要的),并确保我安装了最新的熊猫阅读器,我具有以下输入/输出:
import pandas as pd
import pandas_datareader.data as pdr
from datetime import datetime
asset_list = ['AAPL', 'FB', 'NFLX']
start = datetime(2018, 11, 1)
end = datetime(2018, 11, 25)
data = pdr.DataReader(asset_list, 'iex', start, end)
d = data['close']
d.head(5)
1y
--------------------------------------------------------------------------
-
KeyError Traceback (most recent call
last)
<ipython-input-10-d8026b04c184> in <module>()
4
5 data = pdr.DataReader(asset_list, 'iex', start, end)
----> 6 d = data['close']
7 d.head(5)
KeyError: 'close'
如果有人知道为什么它对我不起作用,我将非常感谢您的帮助!
答案 0 :(得分:0)
由于您没有发布数据框示例,所以我最好的选择是pd.concat
首先,将数据帧的索引设置为Date
:
df = df.set_index('Date')
然后切片并连接数据帧:
merged = pd.concat([df1['close'], df2['close'], ...], axis=1)
然后将日期恢复为一列,然后重命名其他列:
merged = merged.reset_index()
merged = merged.rename(columns={'before':'after'})
如果您能给出一个简单的例子,我可以提供一些详细的结果。
编辑:
我已经尝试了您的代码,但它并没有给我字典,而是给我提供了巨大的数据帧,因此,在完成d = data['close']
之后,我得到的数据帧与您所需的输出相同:
# after your codes
d = data['close']
d.head(5)
Out[22]:
Symbols AAPL FB NFLX TSLA
date
2013-11-27 71.5811 46.49 51.7842 126.94
2013-11-29 72.9066 47.01 52.2571 127.28
2013-12-02 72.2720 47.06 51.9885 124.17
2013-12-03 74.2507 46.73 51.8485 144.70
2013-12-04 74.0774 48.62 50.8957 138.95
d.reset_index().head(5)
Out[23]:
Symbols date AAPL FB NFLX TSLA
0 2013-11-27 71.5811 46.49 51.7842 126.94
1 2013-11-29 72.9066 47.01 52.2571 127.28
2 2013-12-02 72.2720 47.06 51.9885 124.17
3 2013-12-03 74.2507 46.73 51.8485 144.70
4 2013-12-04 74.0774 48.62 50.8957 138.95