Подтвердить что ты не робот

Pandas yahoo finance DataReader

Я пытаюсь получить Adj Close цены от Yahoo Finance в DataFrame. У меня есть все запасы, которые я хочу, но я не могу сортировать по дате.

stocks = ['ORCL', 'TSLA', 'IBM','YELP', 'MSFT']
ls_key = 'Adj Close'
start = datetime(2014,1,1)
end = datetime(2014,3,28)    
f = web.DataReader(stocks, 'yahoo',start,end)


cleanData = f.ix[ls_key]
dataFrame = pd.DataFrame(cleanData)

print dataFrame[:5]

Я получаю следующий результат, который почти идеален.

              IBM   MSFT   ORCL    TSLA   YELP
Date                                           
2014-01-02  184.52  36.88  37.61  150.10  67.92
2014-01-03  185.62  36.64  37.51  149.56  67.66
2014-01-06  184.99  35.86  37.36  147.00  71.72
2014-01-07  188.68  36.14  37.74  149.36  72.66
2014-01-08  186.95  35.49  37.61  151.28  78.42

Однако дата не является элементом. поэтому, когда я запускаю:

print dataFrame['Date']

Я получаю сообщение об ошибке:

KeyError: u'no item named Date'

Надеюсь, кто-нибудь может помочь мне добавить дату.

4b9b3361

Ответ 1

import pandas_datareader.data as web
import datetime    

start = datetime.datetime(2013, 1, 1)
end = datetime.datetime(2016, 1, 27)
df = web.DataReader("GOOGL", 'yahoo', start, end)

dates =[]
for x in range(len(df)):
    newdate = str(df.index[x])
    newdate = newdate[0:10]
    dates.append(newdate)

df['dates'] = dates

print df.head()
print df.tail()

Ответ 2

Дата указана в значениях индекса.

Чтобы получить значение столбца, вы должны просто использовать:

dataframe.reset_index(inplace=True,drop=False)

Затем вы можете использовать

dataframe['Date'] 

потому что "Date" теперь будет одним из ключей в ваших столбцах данных.

Ответ 3

Используйте dataFrame.index для прямого доступа к дате или для добавления явного столбца, используйте dataFrame["Date"] = dataframe.index

stocks = ['ORCL', 'TSLA', 'IBM','YELP', 'MSFT']
ls_key = 'Adj Close'
start = datetime(2014,1,1)
end = datetime(2014,3,28)    
f = web.DataReader(stocks, 'yahoo',start,end)


cleanData = f.ix[ls_key]
dataFrame = pd.DataFrame(cleanData)
dataFrame["Date"] = dataframe.index
print dataFrame["Date"] ## or print dataFrame.index

Ответ 4

Это должно сделать это.

import pandas as pd
from pandas.io.data import DataReader

symbols_list = ['ORCL', 'TSLA', 'IBM','YELP', 'MSFT']
d = {}
for ticker in symbols_list:
    d[ticker] = DataReader(ticker, "yahoo", '2014-12-01')
pan = pd.Panel(d)
df1 = pan.minor_xs('Adj Close')
print(df1)

#df_percent_chg = df1.pct_change()

Ответ 5

f является Panel Вы можете получить индекс DataFrame и reset (Дата), используя:

f.loc['Adj Close',:,:].reset_index()

но я не уверен, что reset_index() очень полезен, поскольку вы можете использовать Date с помощью

f.loc['Adj Close',:,:].index

Вы можете взглянуть на http://pandas.pydata.org/pandas-docs/stable/indexing.html#different-choices-for-indexing об индексировании

Ответ 6

печать (dataFrame.index [0])

2014-01-02 00:00:00

Ответ 7

Подпакет pandas.io.data удаляется из последнего пакета pandas, и он доступен для установки отдельно как pandas-datareader

используйте git для установки пакета. в терминале linux:

git clone https://github.com/pydata/pandas-datareader.git
cd pandas-datareader
python setup.py install

теперь вы можете использовать import pandas_datareader для своего python script для удаленного доступа к данным.

Для получения дополнительной информации Используйте эту ссылку, чтобы просмотреть последнюю документацию

Ответ 8

import pandas_datareader.data as web
import datetime
start = datetime.datetime(2015, 1, 1)
end = datetime.datetime(2016, 1, 1)
web.DataReader('GOOGL', 'yahoo', start, end)