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

非唯一索引的DataFrame使用.loc切片报KeyError的原因是什么?

报错原因
  • pandas的.loc执行标签切片(即起始标签:结束标签格式)时,需要先定位切片左右边界在索引中的唯一位置。当索引非唯一时,重复标签会对应多个行位置,pandas无法判断要以哪个位置作为切片的边界,因此抛出你遇到的KeyError。
  • 你的代码存在额外错误:切片右边界写的是'Age',而你当前DataFrame的索引是Name列的人名值,索引中根本不存在'Age'这个标签,哪怕索引是唯一的,这个写法也会报错。'Age'是列名,不能作为行索引切片的边界值使用。如果你是想要获取所有tom的Age列数据,正确写法是df.loc['tom', 'Age'],不需要用切片语法。
非唯一索引能不能使用.loc?

完全可以,只是不能使用包含重复标签的切片操作而已,普通的标签取值功能完全正常:
比如你执行df.loc['tom']可以正常返回所有索引为tom的行,不会触发报错。

可行的范围切片解决方案

如果你确实需要按行标签做范围切片,可选择以下两种方案:

  1. 先将索引处理为唯一值,比如给重复索引添加数字后缀区分,再使用.loc做标签切片
  2. 先定位到你需要的起始、结束位置的行号,再用.iloc做位置切片,示例代码如下:
# 示例:取第一个tom到最后一个juli之间的所有行
start_pos = df.index.get_loc("tom")[0]
end_pos = df.index.get_loc("juli")[-1]
result = df.iloc[start_pos:end_pos+1]

内容的提问来源于stack exchange,提问作者four-eyes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:09:01