Python Forum
Error using pandas_datareader
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Error using pandas_datareader
#1
I am trying to read stock data using panda's DataReader and getting an error that I am not sure I understand.
The data source : 'yahoo' is found at the following url:

https://pandas-datareader.readthedocs.io...data-yahoo



import pandas_datareader.data as web

bac = web.DataReader('BAC', 'yahoo', start='2019-09-10', end='2019-10-09')
Error:
TypeError Traceback (most recent call last) Input In [13], in <cell line: 6>() 3 end_date = datetime.datetime(2016, 1, 1) 4 #Bank of America 5 #BAC = data.DataReader('BAC', 'yahoo', start='2006-01-01', end='2016-01-01') ----> 6 ge = web.DataReader('BAC', 'yahoo', start='2019-09-10', end='2019-10-09') File C:\Anaconda\lib\site-packages\pandas\util\_decorators.py:207, in deprecate_kwarg.<locals>._deprecate_kwarg.<locals>.wrapper(*args, **kwargs) 205 else: 206 kwargs[new_arg_name] = new_arg_value --> 207 return func(*args, **kwargs) File C:\Anaconda\lib\site-packages\pandas_datareader\data.py:370, in DataReader(name, data_source, start, end, retry_count, pause, session, api_key) 367 raise NotImplementedError(msg) 369 if data_source == "yahoo": --> 370 return YahooDailyReader( 371 symbols=name, 372 start=start, 373 end=end, 374 adjust_price=False, 375 chunksize=25, 376 retry_count=retry_count, 377 pause=pause, 378 session=session, 379 ).read() 381 elif data_source == "iex": 382 return IEXDailyReader( 383 symbols=name, 384 start=start, (...) 390 session=session, 391 ).read() File C:\Anaconda\lib\site-packages\pandas_datareader\base.py:253, in _DailyBaseReader.read(self) 251 # If a single symbol, (e.g., 'GOOG') 252 if isinstance(self.symbols, (string_types, int)): --> 253 df = self._read_one_data(self.url, params=self._get_params(self.symbols)) 254 # Or multiple symbols, (e.g., ['GOOG', 'AAPL', 'MSFT']) 255 elif isinstance(self.symbols, DataFrame): File C:\Anaconda\lib\site-packages\pandas_datareader\yahoo\daily.py:153, in YahooDailyReader._read_one_data(self, url, params) 151 try: 152 j = json.loads(re.search(ptrn, resp.text, re.DOTALL).group(1)) --> 153 data = j["context"]["dispatcher"]["stores"]["HistoricalPriceStore"] 154 except KeyError: 155 msg = "No data fetched for symbol {} using {}" TypeError: string indices must be integers
Reply
#2
Apparently this is a "known issue". After replacing the data source form yahoo to stooq. It worked fine.

import pandas_datareader.data as web
start_date = datetime.datetime(2006, 1, 1)
end_date = datetime.datetime(2016, 1, 1)
#Bank of America
bac = data.DataReader('BAC', 'stooq', start_date, end_date)
bac.head()
Output:
Open High Low Close Volume Date 2015-12-31 14.7814 14.8325 14.6233 14.6233 5.417059e+07 2015-12-30 14.9473 14.9807 14.8070 14.8168 4.030734e+07 2015-12-29 14.9897 15.0780 14.9130 15.0131 5.251059e+07 2015-12-28 14.9630 14.9720 14.7539 14.8846 4.803435e+07 2015-12-24 15.0495 15.1035 14.9630 15.0063 3.380344e+07
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020