调用DataFrame最后一个值时出现KeyError的问题排查与解决
Pandas Series使用负索引[-1]触发KeyError的原因及解决办法
这个问题的核心在于Pandas Series中标签索引和位置索引的区别,我来给你拆解一下:
为什么会触发KeyError?
当你通过q_data.date获取到的是一个Pandas Series对象,这里的[]操作符是按索引标签来查找值的,而不是按位置偏移。从API返回的DataFrame默认索引是从0开始的正整数序列,但-1并不是这个索引里的标签值,所以Pandas找不到对应的键,就抛出了KeyError: -1。
而q_data.date[0]能正常工作,是因为0确实是这个Series索引中的一个有效标签。
正确获取最后一个值的方法
有几种可靠的方式可以获取Series的最后一个值:
1. 使用.iloc[]按位置索引(推荐)
.iloc[]是Pandas专门用于按整数位置访问数据的方法,不管Series的索引标签是什么,-1都代表最后一个位置:
url = 'https://api.iextrading.com/1.0/stock/AAPL/chart/1y' q_data = pd.read_json(url) data = q_data.date[0] data1 = q_data.date.iloc[-1] # 正确获取最后一个date值
2. 使用.tail(1)获取最后一行
.tail(1)会返回包含最后一个元素的Series,再通过.iloc[0]或者.values[0]提取具体值:
data1 = q_data.date.tail(1).iloc[0] # 或者 data1 = q_data.date.tail(1).values[0]
3. 通过索引标签获取(不推荐,依赖索引连续性)
如果确定Series的索引是连续的正整数,也可以先获取最大的索引值再访问:
data1 = q_data.date[q_data.date.index[-1]]
不过这种方法不够可靠,如果索引被修改过(比如出现缺失、非连续的情况)就会出错,所以优先推荐前两种方法。
内容的提问来源于stack exchange,提问作者bkcollection
相关产品推荐
相关产品推荐

