Python股票数据代码报错KeyError: ['Date' 'Adj Close'] not found in axis如何解决
问题解决方法
该报错的核心原因是你调用drop方法时指定的Date和Adj Close两个列,当前DataFrame的列中不存在。
排查步骤
- 首先在
df = df.reset_index()代码后新增一行输出列名的代码,确认当前DataFrame的实际列名:
print(df.columns.tolist())
常见原因及对应解决方案
原因1:pandas_datareader的雅虎数据源已停止维护,拉取的股票数据结构异常
这是最常见的触发原因,雅虎财经多年前就调整了官方API,pandas_datareader原生的雅虎接口早已无法正常返回标准结构的股票数据,甚至会返回空值或异常格式数据。
解决方法:替换为yfinance库拉取雅虎股票数据,操作如下:
- 先安装依赖库:
pip install yfinance
- 修改原有代码的拉取逻辑,修改后的完整代码如下:
# import libraries: import numpy as np import streamlit as st import matplotlib.pyplot as plt import yfinance as yf from keras.models import load_model start = '2010-01-01' end = '2021-08-20' # 用yfinance拉取雅虎股票数据 df = yf.download('CENTUM.NS', start=start, end=end) df.head() df.tail() df = df.reset_index() df.head() df=df.drop(['Date','Adj Close'],axis = 1) df.head()
原因2:列名拼写/大小写不匹配
如果第一步打印出的列名里存在对应字段,只是拼写和你写的不一致(比如列名为date、adj_close等),直接把drop方法里的列名替换为实际打印出的列名即可。
原因3:数据拉取失败
如果打印出的列名完全不符合股票数据的结构,或者DataFrame为空,请检查你使用的股票代码CENTUM.NS是否正确、指定的时间范围是否有效、当前网络是否可以正常访问雅虎财经接口。
内容的提问来源于stack exchange,提问作者Dark040
相关产品推荐
相关产品推荐

