2013-06-03 48 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()