You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:23:06