Skip to content

pandas_datareader failing to get all options for '^ndx' from yahoo #190

Closed
@vishalapte

Description

@vishalapte

The code below works for over 500 symbols but doesn't work for ^ndx.

In [1]: from pandas_datareader import data as pddata

In [2]: foo = pddata.Options('^ndx', 'yahoo')

In [3]: foo.expiry_dates
Out[3]: 
[datetime.date(2016, 3, 18),
 datetime.date(2016, 3, 24),
 datetime.date(2016, 4, 1),
 datetime.date(2016, 4, 8),
 datetime.date(2016, 4, 15),
 datetime.date(2016, 4, 22),
 datetime.date(2016, 4, 29),
 datetime.date(2016, 5, 20),
 datetime.date(2016, 6, 17),
 datetime.date(2016, 9, 16),
 datetime.date(2016, 12, 16),
 datetime.date(2017, 6, 16),
 datetime.date(2017, 12, 15),
 datetime.date(2018, 12, 21)]

In [4]: for d in foo.expiry_dates:
    print(d)
    foo.get_options_data(expiry=d)
   ...:     
2016-03-18
2016-03-24
2016-04-01
2016-04-08
2016-04-15
2016-04-22
2016-04-29
2016-05-20
2016-06-17
2016-09-16
2016-12-16
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-5-dad98abfb543> in <module>()
      1 for d in foo.expiry_dates:
      2     print d
----> 3     foo.get_options_data(expiry=d)
      4 

/Users/v/virtenvs/ns/lib/python2.7/site-packages/pandas_datareader/yahoo/options.pyc in get_options_data(self, month, year, expiry)
    146         return concat([f(month, year, expiry)
    147                        for f in (self.get_put_data,
--> 148                                  self.get_call_data)]).sortlevel()
    149 
    150     def _get_option_frames_from_yahoo(self, expiry):

/Users/v/virtenvs/ns/lib/python2.7/site-packages/pandas_datareader/yahoo/options.pyc in get_put_data(self, month, year, expiry)
    360         """
    361         expiry = self._try_parse_dates(year, month, expiry)
--> 362         return self._get_data_in_date_range(expiry, put=True, call=False)
    363 
    364     def get_near_stock_price(self, above_below=2, call=True, put=False,

/Users/v/virtenvs/ns/lib/python2.7/site-packages/pandas_datareader/yahoo/options.pyc in _get_data_in_date_range(self, dates, call, put)
    606                     frame = getattr(self, nam)
    607                 except AttributeError:
--> 608                     frame = self._get_option_data(expiry=expiry_date, name=name)
    609                 data.append(frame)
    610 

/Users/v/virtenvs/ns/lib/python2.7/site-packages/pandas_datareader/yahoo/options.pyc in _get_option_data(self, expiry, name)
    229             frames = getattr(self, frame_name)
    230         except AttributeError:
--> 231             frames = self._get_option_frames_from_yahoo(expiry)
    232 
    233         option_data = frames[name]

/Users/v/virtenvs/ns/lib/python2.7/site-packages/pandas_datareader/yahoo/options.pyc in _get_option_frames_from_yahoo(self, expiry)
    150     def _get_option_frames_from_yahoo(self, expiry):
    151         url = self._yahoo_url_from_expiry(expiry)
--> 152         option_frames = self._option_frames_from_url(url)
    153         frame_name = '_frames' + self._expiry_to_string(expiry)
    154         setattr(self, frame_name, option_frames)

/Users/v/virtenvs/ns/lib/python2.7/site-packages/pandas_datareader/yahoo/options.pyc in _option_frames_from_url(self, url)
    173 
    174         root = self._parse_url(url)
--> 175         calls = root.xpath('//*[@id="optionsCallsTable"]/div[2]/div/table')[0]
    176         puts = root.xpath('//*[@id="optionsPutsTable"]/div[2]/div/table')[0]
    177 

IndexError: list index out of range
In [9]: import pandas_datareader

In [10]: pandas_datareader.version
Out[10]: '0.2.1'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions