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

pdr.DataReader报错TypeError: string indices must be integers求助

TypeError: string indices must be integers 问题原因分析

原代码

import pandas_datareader as pdr
Equity_Indices = ['^GSPC', 'ES=F', 'NQ=F', 'YM=F', '^RUT', '^DJT', 
                  '^GDAXI', '^N225', '^SSMI', '^STOXX50E', '^FCHI', 
                  '^GSPTSE', '^HSI', '000001.SS', '^KS11', '^NSEI', '^AXJO']
Equity_Indices_df = pdr.DataReader(Equity_Indices, 'yahoo', start='1990-01-01', end='today')

核心原因

这个错误本质是代码预期处理字典/结构化数据,但实际拿到了字符串,尝试用键(字符串类型)去索引字符串时触发报错,具体诱因通常有以下几种:

  • Yahoo Finance接口变更:Yahoo频繁调整数据接口的返回格式,pandas_datareader的Yahoo数据源适配逻辑未及时跟进,原本解析结构化JSON的代码现在拿到了非预期的字符串(比如HTML错误页、新格式的响应头),导致索引操作失败。
  • 单标的数据返回异常:列表中某几个标的(尤其是期货类如ES=F、NQ=F)可能暂时无法获取数据,Yahoo返回了错误提示字符串而非标准的行情数据结构,拖垮了整个批量解析流程。
  • 依赖库自动更新:若环境中pandas_datareader、pandas或requests等依赖库自动更新到了新版本,新老版本的解析逻辑不兼容,也会引发此类解析错误。

临时解决思路

  1. 逐个测试标的,找出返回异常的单个/多个代码,暂时从列表中移除后再尝试批量获取。
  2. 替换为yfinance库(该库专门适配Yahoo Finance接口,维护更活跃),示例代码如下:
import yfinance as yf
Equity_Indices = ['^GSPC', 'ES=F', 'NQ=F', 'YM=F', '^RUT', '^DJT', 
                  '^GDAXI', '^N225', '^SSMI', '^STOXX50E', '^FCHI', 
                  '^GSPTSE', '^HSI', '000001.SS', '^KS11', '^NSEI', '^AXJO']
Equity_Indices_df = yf.download(Equity_Indices, start='1990-01-01', end='today')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:40:44