使用pandas_datareader获取雅虎股票数据时遭遇TypeError报错
问题:使用pandas_datareader获取Yahoo股票数据报错TypeError
未修改原有代码,调用web.DataReader("AAPL", 'yahoo', start, end)时出现TypeError: string indices must be integers错误。
原代码
import datetime as dt from datetime import datetime, timedelta, date import pandas_datareader.data as web start = date(2010,10,1) end = datetime.now() df = web.DataReader("AAPL", 'yahoo', start, end) print(df)
完整错误栈
Traceback (most recent call last): File "d:\code\newgen\newmain.py", line 60, in <module> df = web.DataReader("AAPL", 'yahoo', start, end) File "C:\Users\Owner\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pandas\util\_decorators.py", line 211, in wrapper return func(*args, **kwargs) File "C:\Users\Owner\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pandas_datareader\data.py", line 379, in DataReader ).read() File "C:\Users\Owner\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pandas_datareader\base.py", line 253, in read df = self._read_one_data(self.url, params=self._get_params(self.symbols)) File "C:\Users\Owner\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\pandas_datareader\yahoo\daily.py", line 153, in _read_one_data data = j["context"]["dispatcher"]["stores"]["HistoricalPriceStore"] TypeError: string indices must be integers
原因及解决方案
错误根源是Yahoo Finance的API数据结构发生变更,而pandas_datareader的Yahoo数据源模块已停止维护,无法适配新结构。
解决方法是改用维护活跃的yfinance库:
- 安装yfinance
pip install yfinance
- 修改代码为:
import datetime as dt from datetime import datetime, date import yfinance as yf start = date(2010,10,1) end = datetime.now() df = yf.download("AAPL", start=start, end=end) print(df)
yfinance返回的数据格式与原pandas_datareader结果一致,无需调整后续数据处理逻辑。
内容的提问来源于stack exchange,提问作者Caio Navarro
相关产品推荐
相关产品推荐

