使用Pandas Datareader加载雅虎财经苹果股票数据遇OverflowError求助
错误原因分析
- 时间范围超出系统API支持区间:Windows系统下
time.mktime()函数仅支持处理1970年1月1日至2038年1月19日之间的时间戳,若你的start变量设置的时间早于1970年,就会触发该溢出错误。 - Pandas Datareader的Yahoo接口已停止维护:官方
pandas-datareader对Yahoo Finance的数据源支持早已废弃,即便使用yf.override()做兼容,仍存在时间处理逻辑的兼容性问题。 - 代码语法错误:原代码中
AAPL.df应为AAPL_df(变量命名错误),且[Adj Close]未加引号,会被解释为未定义的变量,后续会引发NameError。
解决方案
最优方案:直接使用yfinance库替代
yfinance是专门维护的Yahoo Finance数据获取工具,兼容性和稳定性远优于已废弃的pandas-datareader Yahoo接口,代码示例:
import yfinance as yf import pandas as pd # 设置合理的时间范围(AAPL上市于1980年12月12日,确保在系统支持区间内) start_date = '1980-12-12' end_date = pd.Timestamp.today() # 获取数据并完成月度重采样、填充、计算涨跌幅 aapl_df = yf.download('AAPL', start=start_date, end=end_date)['Adj Close'].resample('M').ffill().pct_change()
备选方案:修正时间范围(若坚持用pandas-datareader)
- 确保
start变量对应的日期在1970年1月1日之后,例如:start = '1970-01-01' - 注意:即便修正时间,
pandas-datareader的Yahoo接口仍可能出现其他请求失败问题,不推荐长期使用。
语法错误修正
原代码需调整两处:
- 将
AAPL.df改为AAPL_df(符合Python变量命名规范) - 将
[Adj Close]改为['Adj Close'](用字符串索引DataFrame列)
内容的提问来源于stack exchange,提问作者Jfel
相关产品推荐
相关产品推荐

