2015-08-30 3 views
1

Это часть кода (упражнения) из книги О'Рейли Python for Data Analysis.Получение NaN для колонки в пандах DataFrame

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:

DataFrame

Я знаю, что код не является то, что вы назвали бы оптимальные, но это книжные упражнения, и я стараюсь учиться у них, экспериментируя.

Если я только данные, относящиеся к Google и сделать DataFrame из этого, появляются реальные цифры:

DataFrame(all_data['GOOG']['Adj Close']).head() 

Google DataFrame

Но когда я пытаюсь сделать то же самое для всех тикер, он опять не идет:

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() 

DataFrame all tickers

Любое понимание того, что может быть причиной этого, будет с благодарностью!

Версия информация:

  • Python 3.4.2
  • панды (0.16.2)
  • NumPy (1.9.2)

ответ

1

Google теперь имеет два класса публично торгуемых акций , класс C («GOOG») был выпущен в 2014 году, а оригинальная сделка A по сделке «GOOGL». Статья here с дополнительной информацией.

Чтобы иметь полную историю для всех 4, просто измените тикер. Это также довольно хороший пример того, что означает, что данные «отсутствуют». Если вы хотите отфильтровать общие даты для этих оригинальных 4 тикеров, вы можете сделать price = price.dropna()

+0

Теперь я чувствую себя глупо, поскольку ответ смотрел мне прямо в лицо. Я подозревал, что я делал что-то неправильно при слиянии данных, но это произошло только из-за периода (2014 по сравнению с 2010 годом). Спасибо, что поняли! –

1

Вы не смотрите на полные данные. Посмотрите даты в ваших двух перестановках.

>>> price.GOOG.isnull().sum() 
1064 

попробовать хвост()

>>> 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 изменения со стороны Google. Они несколько раз меняли свою структуру акций, чтобы контролировать права голоса и т. Д. Таким образом, цена акции не определена для этого идентификатора запаса до определенной даты.

Это может помочь использовать IDE, такую ​​как Spyder - вы можете просматривать полный фрейм данных в виде Matlab, как это происходит, что останавливает подобное событие.

Смежные вопросы