使用web.DataReader调用Yahoo Finance API时遇TypeError错误求助
解决pandas_datareader调用Yahoo Finance API时的TypeError问题
问题概述
使用pandas_datareader库的DataReader调用Yahoo Finance API获取资产历史数据(包括GOOG、AAPL、MSFT及目标资产BTC-USD)时,触发TypeError: string indices must be integers错误,更换资产符号后问题依旧。
错误原因
pandas_datareader的Yahoo Finance数据源已停止维护,Yahoo Finance的页面结构与接口协议发生了变更,原库的响应解析逻辑无法正确处理当前返回的内容,导致代码尝试对字符串执行字典索引操作(如j["context"]),从而触发类型错误。
解决方案
改用yfinance库,这是目前专门适配Yahoo Finance且维护活跃的第三方库,可稳定获取股票、加密货币等各类资产的历史数据。
步骤1:安装yfinance
执行以下命令安装库:
pip install yfinance
步骤2:替换代码获取数据
以下是适配BTC-USD的完整代码示例:
import yfinance as yf import pandas as pd import matplotlib.pyplot as plt # 设置参数 date_start = "2010-01-01" date_today = "2020-01-01" symbol = "BTC-USD" # 获取数据 ticker = yf.Ticker(symbol) df = ticker.history(start=date_start, end=date_today) # 查看前5行数据 print(df.head(5))
代码说明
yf.Ticker(symbol):创建对应资产的Ticker对象,支持股票、加密货币等各类Yahoo Finance可查询的资产符号ticker.history(start, end):获取指定时间范围的历史数据,返回的DataFrame结构与pandas_datareader返回的格式兼容,可直接用于后续的数据分析与可视化操作
内容的提问来源于stack exchange,提问作者pink_ai
相关产品推荐
相关产品推荐

