pandas DataFrame和Yahoo Finance API

时间:2016-06-13 20:20:20

标签: python-2.7 api pandas dataframe yahoo-finance

我正在尝试使用Yahoo Finance API将数据读入DataFrame。但是,当我从列表中读取符号的值时,它们最终会出现在DataTable中的单个列中。我正在使用API​​,因为我实际上想要分红,P / E等数据,我认为你不能用datareader访问这些数据。我有两个问题:

  1. 如何从列表中获取值以映射到DataFrame中的列 (而不是行)
  2. 我如何完成我想要的股票代码列表

    import urllib2
    from pandas import DataFrame
    def get_data2(symbol):
        columns = ['last','date','change','high','low','vol']    
        url = "http://download.finance.yahoo.com/d/quotes.csv?s=%s&f=sl1d1c1hgv" % symbol
        file =urllib2.urlopen(url)    
        s = file.read()
        file.close()
        s= s.strip()
        L = s.split(',')
        L[0] = L[0].replace('"','')
        L[2] = L[2].replace('"','')
        D = DataFrame(L, columns=columns)
        return D
    
  3. 使用这段代码我得到一个ValueError,因为形状不匹配,但实质上我想从列表中读取每个值到DataTable中的一列,最后迭代一个符号列表。

    感谢您的帮助

1 个答案:

答案 0 :(得分:5)

试试这个:

In [23]: from pandas_datareader import data

In [24]: data.DataReader('GOOG', 'yahoo', '2016-06-01', '2016-06-13')
Out[24]:
                  Open        High         Low       Close   Volume   Adj Close
Date
2016-06-01  734.530029  737.210022  730.659973  734.150024  1250800  734.150024
2016-06-02  732.500000  733.020020  724.169983  730.400024  1337600  730.400024
2016-06-03  729.270020  729.489990  720.559998  722.340027  1222700  722.340027
2016-06-06  724.909973  724.909973  714.609985  716.549988  1565300  716.549988
2016-06-07  719.840027  721.979980  716.549988  716.650024  1336200  716.650024
2016-06-08  723.960022  728.570007  720.580017  728.280029  1582100  728.280029
2016-06-09  722.869995  729.539978  722.335999  728.580017   985900  728.580017
2016-06-10  719.469971  725.890015  716.429993  719.409973  1206000  719.409973

Demo for building pandas Panel when pulling data for multiple tickers

Demo for pulling custom Yahoo quotes (for example: Market Cap, Div Yield, EPS Est Next Quarter, etc.)