这是O'Reilly一书Python for Data Analysis中的一段代码(练习)。
from pandas import Series, DataFrame
import pandas.io.data as web
all_data = {}
for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']:
all_data[ticker] = web.get_data_yahoo(ticker)
price = DataFrame({k: v['Adj Close'] for k,v in all_data.items()})
奇怪的是,当我查看生成的DataFrame时,Google的内容始终为NaN
:
我知道代码不是你所说的最佳代码,但这些是书本练习,我试图通过实验来学习它们。
如果我只获取与Google相关的数据并制作数据框,则会显示实际数据:
DataFrame(all_data['GOOG']['Adj Close']).head()
但是当我尝试对所有股票代码符号做同样的事情时,它又出错了:
DataFrame([all_data['GOOG']['Adj Close'],
all_data['AAPL']['Adj Close'],
all_data['IBM']['Adj Close'],
all_data['MSFT']['Adj Close']],
index=['GOOG', 'AAPL', 'IBM', 'MSFT']).T.head()
对于可能导致此问题的任何见解将不胜感激!
版本信息:
答案 0 :(得分:1)
所以要拥有所有4的完整历史记录,只需更改自动收报机即可。这也是数据“缺失”意味着什么的一个很好的例子。如果您想过滤这些原始4个代码的常见日期,您可以执行price = price.dropna()
答案 1 :(得分:1)
您没有查看完整数据。看看你的两次重组中的日期。
>>> price.GOOG.isnull().sum()
1064
尝试tail()
>>> price.GOOG.head()
Date
2010-01-04 NaN
2010-01-05 NaN
2010-01-06 NaN
2010-01-07 NaN
2010-01-08 NaN
>>> price.GOOG.tail()
Date
2015-08-24 589.609985
2015-08-25 582.059998
2015-08-26 628.619995
2015-08-27 637.609985
2015-08-28 630.380005
我怀疑潜在的原因是谷歌的RIC变化。他们已多次更改其股票结构以控制投票权等。因此,股票价格在特定日期之前没有为该股票标识符定义。
使用像Spyder这样的IDE可能会有所帮助 - 您可以像matlab一样查看完整的数据框,从而阻止这种事情的发生。