【问题标题】:Receiving NaN for a column in pandas DataFrame为 pandas DataFrame 中的列接收 NaN
【发布时间】:2015-08-30 21:40:57
【问题描述】:

这是来自 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
  • 熊猫 (0.16.2)
  • numpy (1.9.2)

【问题讨论】:

    标签: python pandas python-3.4


    【解决方案1】:

    Google 现在有两类公开交易的股票,C 类(“GOOG”)于 2014 年发行,原 A 股在“GOOGL”下交易。文章here 提供更多信息。

    因此,要获得所有 4 个的完整历史记录,只需更改代码即可。这也是数据“丢失”意味着什么的一个很好的例子。如果您想过滤到那些原始 4 个代码的常见日期,您可以这样做 price = price.dropna()

    【讨论】:

    • 我现在觉得很傻,因为答案就在我眼前。我怀疑我在合并数据时做错了什么,但这只是由于时期(2014 年 vs 2010 年)。感谢您解决这个问题!
    【解决方案2】:

    您没有查看完整数据。查看两次重新排列中的日期。

    >>> 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 的方式查看完整的数据框,从而阻止此类事情的发生。

    【讨论】:

      猜你喜欢
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 2019-06-25
      • 2018-01-14
      • 2014-12-03
      • 2023-01-19
      相关资源
      最近更新 更多