接收 pandas DataFrame 中列的 NaN
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()
任何有关可能导致此问题的见解都将不胜感激!
版本信息:
- Python 3.4.2
- pandas (0.16.2)
- numpy (1.9.2)
Google现有两只class上市股票,其中classC("GOOG")于2014年发行,原A股股票交易号为"GOOGL"。包含更多信息的文章 here。
因此,要获得所有 4 个的完整历史记录,只需更改代码即可。这也是数据 "missing" 意味着什么的一个很好的例子。如果您想筛选出那些原始 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 的方式中查看完整的数据帧,从而阻止这种事情的发生。
这是 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()
任何有关可能导致此问题的见解都将不胜感激!
版本信息:
- Python 3.4.2
- pandas (0.16.2)
- numpy (1.9.2)
Google现有两只class上市股票,其中classC("GOOG")于2014年发行,原A股股票交易号为"GOOGL"。包含更多信息的文章 here。
因此,要获得所有 4 个的完整历史记录,只需更改代码即可。这也是数据 "missing" 意味着什么的一个很好的例子。如果您想筛选出那些原始 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 的方式中查看完整的数据帧,从而阻止这种事情的发生。