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

使用yfinance/yahooquery获取美股数据遇多类错误求助

问题描述

尝试用yfinance下载AAPL股票数据,执行代码:

!pip install yfinance
import yfinance as yf
yf.download('AAPL', start='2015-01-01', end=pd.to_datetime('today'), progress=False)

返回错误:

1 Failed download:
AAPL: TypeError("import_optional_dependency() got an unexpected keyword argument 'errors'")

打印数据得到空数组。

使用Ticker类:

print(yf.Ticker('AAPL').info)

返回:

Exception: yfinance failed to decrypt Yahoo data response

尝试yahooquery:

!pip install yahooquery
from yahooquery import Ticker

t = Ticker('AAPL', asynchronous=True)
print(t.history(period='ytd', interval='1d'))

print(t.asset_profile)

返回:

Empty DataFrame
Columns: [high, low, volume, open, close]
Index: []
{'APPL': 'No fundamentals data found for any of the
summaryTypes=assetProfile'}

同时pandas datareader也无法正常工作,怀疑依赖yfinance导致。

解决方案

1. 修复yfinance版本兼容问题

第一个错误是yfinance与pandas版本不兼容导致的,执行以下操作:

  • 卸载当前yfinance:
    pip uninstall -y yfinance
    
  • 安装兼容版本(如0.2.31,适配多数pandas环境):
    pip install yfinance==0.2.31
    
  • 重新运行代码时先导入pandas:
    import pandas as pd
    import yfinance as yf
    data = yf.download('AAPL', start='2015-01-01', end=pd.to_datetime('today'), progress=False)
    print(data.head())
    

2. 解决yfinance解密失败问题

Yahoo近期调整了数据加密规则,若仍出现解密错误,可手动指定请求头:

import yfinance as yf
import requests

session = requests.Session()
session.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'

ticker = yf.Ticker('AAPL', session=session)
print(ticker.info)

3. 修复yahooquery的错误

返回结果里的APPL是拼写错误(应为AAPL),修正代码:

from yahooquery import Ticker

t = Ticker('AAPL', asynchronous=True)
# 获取历史数据
print(t.history(period='ytd', interval='1d'))
# 获取资产信息
print(t.asset_profile['AAPL'])

若仍返回空DataFrame,关闭异步模式尝试:

t = Ticker('AAPL', asynchronous=False)
print(t.history(period='ytd', interval='1d'))

4. 处理pandas datareader问题

pandas datareader依赖yfinance作为Yahoo数据源后端,解决yfinance问题后即可正常使用:

import pandas_datareader.data as web
import pandas as pd

data = web.DataReader('AAPL', 'yahoo', start='2015-01-01', end=pd.to_datetime('today'))
print(data.head())

内容的提问来源于stack exchange,提问作者eth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:32:43