如何使用yfinance和pandas datareader导入读取雅虎财经外汇数据
问题根因
旧版pandas-datareader原生的雅虎财经接口没有适配非股票类标的的返回规则,直接传入EURUSD=X这类外汇报价代码时,会出现接口返回空值、字段匹配失败的问题。目前雅虎财经类数据拉取的通用方案是用yfinance做兼容层,替代原生接口的请求逻辑。
操作步骤
- 先安装/升级依赖到最新版本,避免版本兼容问题:
pip install --upgrade pandas pandas-datareader yfinance - 调用
yfinance提供的补丁方法,覆盖pandas-datareader原有的雅虎数据请求逻辑,不需要修改你原有代码的参数习惯 - 外汇报价直接使用雅虎财经标准代码即可,比如欧元兑美元为
EURUSD=X、美元兑日元为USDJPY=X,代码格式为{基准货币}{报价货币}=X
可直接复用的代码
import pandas as pd import pandas_datareader.data as pdr import yfinance as yf # 加载yfinance兼容补丁,必须在调用get_data_yahoo之前执行 yf.pdr_override() # 资产列表可同时放入股票、外汇代码,不需要分开处理 asset_list = ['EURUSD=X', 'AAPL'] start_date = '2016-1-1' data = {} for asset in asset_list: data[asset] = pdr.get_data_yahoo(asset, start=start_date)
注意事项
- 你原有代码里存在变量名大小写不一致的问题:定义列表时用的是
Stocklist,循环时写的是StockList,运行时会直接触发变量不存在的报错,需要统一变量名 - 外汇数据返回的字段结构和股票完全一致,包含开盘价、最高价、最低价、收盘价、成交量字段,其中外汇品种的成交量字段大多返回0,属于正常情况,你之前写的Renko砖形图绘制、K线柱统计逻辑可以直接复用,不需要额外调整
- 如果拉取数据时出现超时,可以在
get_data_yahoo里加threads=False参数关闭多线程请求,提升稳定性
内容的提问来源于stack exchange,提问作者Nidal Zd
相关产品推荐
相关产品推荐

