Python:通过字典创建收盘价数据框

时间:2018-11-27 04:19:07

标签: python dictionary dataframe

我已经搜索了互连网,但似乎无法弄清楚该怎么做。

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'

如果有人知道为什么它对我不起作用,我将非常感谢您的帮助!

1 个答案:

答案 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