如何解决Python中web.DataReader获取金融数据时的报错问题
Python调用web.DataReader拉取金融数据报错修复方案
核心问题定位
- 缺失必要依赖库,且未导入
web对应模块:web.DataReader由pandas_datareader库提供,原代码既没有安装该依赖,也没有做对应导入,调用时会直接报名称错误 - 雅虎财经官方接口调整:原生
pandas_datareader的雅虎数据源接口已失效,需要搭配yfinance库打兼容补丁才能正常拉取数据
修复后完整可运行代码
!pip install mplfinance !pip install seaborn !pip install matplotlib !pip install pandas-datareader !pip install yfinance import numpy as np import pandas as pd from pandas_datareader import data as web import yfinance as yf import mplfinance as mpf import datetime as dt import matplotlib.pyplot as plt import seaborn as sns # 打补丁适配雅虎财经接口 yf.pdr_override() currency = "USD" metric = "Close" start = dt.datetime(2018,1,1) end = dt.datetime.now() crypto = ['BTC', 'ETH', 'LTC', 'XRP', 'DASH', 'SC'] colnames = [] first = True for ticker in crypto: data = web.DataReader(f"{ticker}-{currency}", "yahoo", start, end) if first: combined = data[[metric]].copy() colnames.append(ticker) combined.columns = colnames first = False else: combined = combined.join(data[metric]) colnames.append(ticker) combined.columns = colnames plt.yscale('log') for ticker in crypto: plt.plot(combined[ticker], label=ticker) plt.legend(loc="upper right") plt.show() # 相关性热力图 print(combined) combined = combined.pct_change().corr(method='pearson') sns.heatmap(combined, annot=True, cmap="coolwarm") plt.show()
额外注意事项
如果运行时出现单个币种拉取失败的报错,可先将对应币种从crypto列表中移除测试,部分小众加密货币可能存在雅虎端数据缺失、交易对下架的情况。
内容的提问来源于stack exchange,提问作者Fmu Fmu
相关产品推荐
相关产品推荐

