You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:54:04