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

解决yfinance获取QQQ持仓时的TypeError: string indices must be integers错误

解决yfinance获取QQQ持仓时的TypeError问题

问题原因

你遇到的TypeError: string indices must be integers是因为qqq.info.get("holdings")返回的内容并非预期的字典列表,而是字符串或非可迭代结构——Yahoo Finance的API更新后,yfinance的info字段里的holdings格式已发生变化,不再支持直接按列表切片和提取symbol。

修复方案

现在yfinance提供了专门的fund_holdings属性来获取ETF持仓数据,返回结构化的DataFrame,可直接提取权重、股票代码等信息。

修正后的代码

import yfinance as yf
import pandas as pd

etf_symbol = "QQQ"
qqq = yf.Ticker(etf_symbol)

# 获取ETF持仓的DataFrame数据
holdings_df = qqq.fund_holdings
# 筛选权重靠前的前50只持仓
top_50_holdings = holdings_df.head(50)
# 提取股票代码列表
top_50_symbols = top_50_holdings["Symbol"].tolist()

# 验证结果
print(top_50_symbols)

额外说明

  • fund_holdings返回的DataFrame包含Symbol(股票代码)、% Weight(持仓权重)等列,可直接用于回测数据处理
  • 如果遇到fund_holdings为空的情况,可尝试重新运行代码(yfinance可能存在缓存延迟),或检查网络连接是否正常
  • 若后续字段有变动,可通过print(holdings_df.columns)查看当前的列名结构

内容的提问来源于stack exchange,提问作者Talos-Fable

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:25:27