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等依赖库自动更新到了新版本,新老版本的解析逻辑不兼容,也会引发此类解析错误。
临时解决思路
- 逐个测试标的,找出返回异常的单个/多个代码,暂时从列表中移除后再尝试批量获取。
- 替换为
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
相关产品推荐
相关产品推荐

