[英]Receiving NaN for a column in pandas DataFrame
这是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,则会显示实际数字:
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()
任何有关可能导致这种情况的见解将不胜感激!
版本信息:
Google现在拥有两类公开交易的股票,C类(“ GOOG”)于2014年发行,原始的A股交易名为“ GOOGL”。 在此处提供更多信息。
因此,要拥有所有4的完整历史记录,只需更改股票代码即可。 这也很好地说明了数据“丢失”的含义。 如果您想为那些原始的4个行情过滤器过滤到公共日期,可以执行price = price.dropna()
您没有查看完整的数据。 查看两个重排中的日期。
>>> 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
我怀疑根本原因是Google进行了RIC更改。 他们多次更改了股份结构以控制投票权等。因此,在特定日期之前未为该股票标识符定义股价。
使用像Spyder这样的IDE可能会有所帮助-您可以通过类似Matlab的方式查看完整的数据帧,从而阻止了此类事情的发生。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.