2014-04-10 6 views
13

Ich versuche, die Adj Close Preise von Yahoo Finance in einen DataFrame zu bekommen. Ich habe alle Aktien, die ich will, aber ich bin nicht in der Lage, nach Datum zu sortieren.Pandas Yahoo Finanzen 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] 

Ich bekomme das folgende Ergebnis, das fast perfekt ist.

   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 

Allerdings ist das Datum kein Item. so, wenn ich laufen:

print dataFrame['Date'] 

ich den Fehler:

KeyError: u'no item named Date' 

Hoffnung mir jemand das Datum Zugabe helfen kann.

+3

Datum ist Ihr Index, so dataFrame.index, das Sie die Datumsspalte erhalten – Retozi

+2

Sie 'Datenrahmen tun können [ "Datum"] = dataframe.index', wenn Sie wollen um eine Spalte namens 'Date' mit den Indexwerten darin hinzuzufügen – ejrb

+0

Vielen Dank für die Eingabe. Es funktioniert jetzt gut –

Antwort

1

Verwenden dataFrame.index direkt Datum zugreifen oder eine explizite Spalte hinzuzufügen, verwenden 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

Dies sollte es tun.

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

Zuerst, erhalten Daten in Pandas 'Dataframe' mit Pandas 'Datenleser', zweitens, Slice 'Dataframe' Index (der Datumsangaben hat), um nur Datum zu bekommen, drittens, 'Datum' Daten zu 'Dataframe' hinzufügen. .. –

4

Datum ist in den Indexwerten.

Um es in einen Spaltenwert zu erhalten, sollten Sie nur verwenden:

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

Dann können Sie

dataframe['Date'] 

verwenden, da „Date“ jetzt einer der Schlüssel sein wird, in Ihre Spalten der Datenrahmen.

0

print (dataFrame.index [0])

2014-01-02 00:00:00

0

Das Teilpaket pandas.io.data aus dem aktuellen pandas Paket entfernt wird, und es ist separat zu installieren als pandas-datareader

Verwenden Sie git, um das Paket zu installieren. in dem Linux-Terminal:

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

jetzt können Sie import pandas_datareader zu Ihrem Python-Skript für Datenfernzugriff verwenden.

Weitere Informationen 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', Anfang, Ende)' then 'print (df)' – noobninja

Verwandte Themen