2013-06-03 54 views
3

我用:如何:Python的熊貓獲得當前股票數據

data = DataReader("yhoo", "yahoo", datetime.datetime(2000, 1, 1), 
        datetime.datetime.today()) 

在大熊貓(蟒蛇),以獲得雅虎的歷史數據,但它不能顯示今天的價格(市場尚未閉合)我怎樣才能解決這個問題,預先感謝。

回答

1

所以從試驗中看到數據幀並不太可能。你告訴它從特定的一天直到今天,但數據框停止在2013年5月31日。這告訴我,雅虎可能還沒有提供給你在過去幾天使用,或者某種程度上,熊貓只是沒有拿起它。它不只是失蹤1天,它缺少3

如果我做了以下內容:

>>> df = DataReader("yhoo", "yahoo", datetime.datetime(2013, 6, 1),datetime.datetime.today()) 
>>> len(df) 
0 

它讓我發現,目前根本沒有數據在那些日子裏拿起至今。如果有一些解決方法,那麼我無法弄清楚,但看起來數據還沒有爲您提供,這很難相信。

+0

由於在R中,quantmod軟件包可以通過在時間序列數據中添加一列來解決此問題。 – perigee

+0

你可以很容易地向熊貓添加列,但是你沒有來自雅虎的數據來填充它......我真的很驚訝,熊貓不會一直到達日期,並用NAN填充這些行 –

1

找到一種方法來解決,只是用的urllib獲取的數據:

http://download.finance.yahoo.com/d/quotes.csv?s=yhoo&f=sd1ohgl1l1v 

然後將其添加到數據幀

5
import pandas 
import pandas.io.data 
import datetime 
import urllib2 
import csv 

YAHOO_TODAY="http://download.finance.yahoo.com/d/quotes.csv?s=%s&f=sd1ohgl1vl1" 

def get_quote_today(symbol): 
    response = urllib2.urlopen(YAHOO_TODAY % symbol) 
    reader = csv.reader(response, delimiter=",", quotechar='"') 
    for row in reader: 
     if row[0] == symbol: 
      return row 

## main ## 
symbol = "TSLA" 

history = pandas.io.data.DataReader(symbol, "yahoo", start="2014/1/1") 
print history.tail(2) 

today = datetime.date.today() 
df = pandas.DataFrame(index=pandas.DatetimeIndex(start=today, end=today, freq="D"), 
         columns=["Open", "High", "Low", "Close", "Volume", "Adj Close"], 
         dtype=float) 

row = get_quote_today(symbol) 
df.ix[0] = map(float, row[2:]) 

history = history.append(df) 

print "today is %s" % today 
print history.tail(2) 

只是爲了完成近地點的回答,難道我花費相當長的一段有時間找到一種方法來追加數據。

   Open High  Low Close Volume Adj Close 
Date 
2014-02-04 180.7 181.60 176.20 178.73 4686300  178.73 
2014-02-05 178.3 180.59 169.36 174.42 7268000  174.42 

today is 2014-02-06 

       Open High  Low Close Volume Adj Close 
2014-02-05 178.30 180.59 169.36 174.420 7268000 174.420 
2014-02-06 176.36 180.11 176.00 178.793 5199297 178.793 
1

該代碼使用read_csv方法大熊貓擺脫雅虎的新的報價,並且它會檢查新的報價是從當前日期或爲了在歷史上更新的最後一條記錄的新日期或更新附加一條新記錄。 如果您在new_quote部分添加一段while(true)循環和休眠,則可以讓代碼在一天中刷新報價。 它也有重複的最後交易價格填寫關閉和調整關閉​​,因爲盤中關閉和調整關閉​​總是相同的價值。

import pandas as pd 
import pandas.io.data as web 

def get_quote_today(symbol): 
    url="http://download.finance.yahoo.com/d/quotes.csv?s=%s&f=d1t1ohgl1vl1" 

    new_quote= pd.read_csv(url%symbol, 
          names=[u'Date',u'time',u'Open', u'High', u'Low', 
           u'Close', u'Volume', u'Adj Close']) 

    # generate timestamp: 
    stamp = pd.to_datetime(new_quote.Date+" "+new_quote.time) 
    new_quote.index= stamp 
    return new_quote.iloc[:, 2:] 


if __name__ == "__main__": 
    symbol = "TSLA" 

    history = web.DataReader(symbol, "yahoo", start="2014/1/1") 
    print history.tail() 
    new_quote = get_quote_today(symbol) 
    if new_quote.index > history.index[-1]: 
     if new_quote.index[-1].date() == history.index[-1].date(): 
      # if both quotes are for the first date, update history's last record. 
      history.iloc[-1]= new_quote.iloc[-1] 
     else: 
      history=history.append(new_quote) 
    history.tail()