使用pandas_datareader与yfinance获股票数据遇TypeError求助
问题描述
我正在PyCharm中编写股票价格预测程序,导入的库如下:
import pandas as pd import numpy as np import pandas_datareader as web import datetime as dt import yfinance as yf
触发错误的代码行:
# load Data company = 'fb' start = dt.datetime(2012, 1, 1) end = dt.datetime(2020, 1, 1) df = yf.download(tickers=['^GSPC'], start=start, end=end) data = web.DataReader(company, 'yahoo', start, end)
运行后yf.download执行正常,但web.DataReader触发如下错误:
C:\ProgramData\Anaconda3\envs\pythonProject\python.exe F:\pythonProject\main.py [*********************100%***********************] 1 of 1 completed Traceback (most recent call last): File "F:\pythonProject\main.py", line 19, in <module> data = web.DataReader(company, 'yahoo', start, end) File "C:\Users\Deepanshu\AppData\Roaming\Python\Python310\site-packages\pandas\util\_decorators.py", line 211, in wrapper return func(*args, **kwargs) File "C:\ProgramData\Anaconda3\envs\pythonProject\lib\site-packages\pandas_datareader\data.py", line 379, in DataReader ).read() File "C:\ProgramData\Anaconda3\envs\pythonProject\lib\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:\ProgramData\Anaconda3\envs\pythonProject\lib\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 Process finished with exit code 1
已安装yfinance库,但每次运行都会出现相同错误,请求帮助解决。
解决方案
这个错误是因为pandas_datareader的Yahoo数据源已失效,Yahoo更新API接口结构后,pandas_datareader未及时适配,导致解析返回内容时出错。
你已安装yfinance,直接用它替代pandas_datareader获取股票数据即可,修改代码如下:
# 替换原web.DataReader的代码行 data = yf.download(tickers=company, start=start, end=end)
如果需要和原DataReader返回格式保持一致,可使用yfinance的Ticker类:
ticker = yf.Ticker(company) data = ticker.history(start=start, end=end)
另外注意:原代码中company = 'fb'需改为'META',Facebook已更名,Yahoo财经中对应的股票代码为META,使用fb可能无法获取到正确数据。
内容的提问来源于stack exchange,提问作者Deepanshu Lakde
相关产品推荐
相关产品推荐

