2014-04-10 13 views
13

Sto cercando di ottenere i prezzi di chiusura di Adj da Yahoo Finance in un DataFrame. Ho tutti gli stock che voglio, ma non sono in grado di ordinare in data.Finanziamenti di pandas yahoo DataReader

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] 

Ottengo il seguente risultato, che è quasi perfetto.

   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 

Tuttavia, la data non è un articolo. così quando ho eseguito:

print dataFrame['Date'] 

ottengo l'errore:

KeyError: u'no item named Date' 

La speranza qualcuno mi può aiutare aggiungendo la data.

+3

data è l'indice, in modo da dataFrame.index, questo ti porterà la colonna della data – Retozi

+2

si può fare 'dataframe [ "data"] = dataframe.index' se si desidera per aggiungere una colonna chiamata 'Data' con i valori dell'indice al suo interno – ejrb

+0

Grazie mille per l'input. Funziona benissimo ora –

risposta

1

Usa dataFrame.index per accedere direttamente data o per aggiungere una colonna esplicito, utilizzare 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 
1

Questo dovrebbe farlo.

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() 
6
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() 
+0

Innanzitutto, recupera i dati in "dataframe" dei panda con "datareader" di panda, in secondo luogo, l'indice "dataframe" (che ha informazioni sulla data) per ottenere solo la data, terzo, aggiungere le date "data" a "dataframe". .. –

4

La data è nei valori dell'indice.

Per farlo in un valore di colonna, si dovrebbe usare:

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

quindi è possibile utilizzare

dataframe['Date'] 

perché "Data" ora sarà una delle chiavi nelle vostre colonne di il dataframe.

0

stampa (dataFrame.index [0])

2014-01-02 00:00:00

0

Il pandas.io.data sub-package viene rimosso dal l'ultimo pacchetto panda ed è disponibile per l'installazione separatamente come pandas-datareader

utilizzare git per installare il pacchetto. nel terminale Linux:

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

ora è possibile utilizzare import pandas_datareader allo script python per accesso remoto ai dati.

Per ulteriori informazioni Use this link to visit the latest documentation

0
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) 
+0

'df = web.DataReader ('GOOGL', 'yahoo', inizio, fine)' poi 'stampa (df)' – noobninja