解决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
相关产品推荐
相关产品推荐

