使用Pandas DataReader获取Yahoo数据时遇TypeError及ValueError求助
解决Pandas DataReader获取Yahoo数据失败的问题
错误原因分析
第一个错误:TypeError: download() got multiple values for argument 'start'
调用web.DataReader('AAPL', 'Yahoo', start=start_date, end=end_date)时,pandas_datareader的Yahoo接口内部调用yfinance的download函数时,位置参数与关键字参数混合传递导致start被多次赋值,引发参数冲突。
第二个错误:ValueError("time data 'yahoo' does not match format '%Y-%m-%d'")
web.DataReader('AAPL', 'yahoo', start_date, end_date)的参数顺序错误,当前版本的web.DataReader不支持(name, data_source, start, end)的参数顺序,程序将'yahoo'误认为起始日期字符串,导致日期解析失败。
解决方案
方法1:直接使用yfinance库(推荐)
pandas_datareader的Yahoo数据源现已依赖yfinance,直接调用yfinance更稳定可靠:
import yfinance as yf import datetime as dt start_date = dt.datetime(2020, 1, 1) end_date = dt.datetime(2021, 1, 1) # 获取AAPL股票数据 aapl_df = yf.download('AAPL', start=start_date, end=end_date) # 查看最后5行数据 print(aapl_df.tail())
方法2:修正pandas_datareader的调用方式
若坚持使用pandas_datareader,可通过以下两种方式调整参数传递:
import pandas_datareader.data as web import datetime as dt start_date = dt.datetime(2020, 1, 1) end_date = dt.datetime(2021, 1, 1) # 方式A:用关键字参数明确指定所有参数 aapl_df = web.DataReader(name='AAPL', data_source='yahoo', start=start_date, end=end_date) # 方式B:按正确参数顺序传递(name, start, end, data_source) aapl_df = web.DataReader('AAPL', start_date, end_date, 'yahoo') print(aapl_df.tail())
前置依赖安装
确保已安装所需依赖库:
pip install pandas_datareader yfinance
内容的提问来源于stack exchange,提问作者DrDragon3
相关产品推荐
相关产品推荐

