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

Pandas设置列为索引后无法通过iloc按新索引选取行的问题

Pandas设置列为索引后无法通过iloc按新索引选取行的问题

嘿,你这里踩了个Pandas新手常犯的小坑——把**位置索引(iloc)和标签索引(loc)**的用法搞混啦!

先给你掰明白问题出在哪:

  • 当你用set_index("duck_ids")把duck_ids列设为DataFrame的索引后,这个新的索引属于「标签(label)」,而iloc这个方法是专门用来按整数位置(也就是原来的0、1、2...这种顺序位置)来选取行的,不管你有没有修改过索引标签。
  • 你写ducks.iloc[test_set_duck_ids]的时候,Pandas会误以为你要选第3022行和第3090行,但你的DataFrame总共才4行,位置索引最大只有3,所以直接触发了IndexError,提示位置超出范围。

那正确的做法是什么呢?
要按你设置的新索引标签(也就是duck_ids的数值)来选行,你得用loc方法,它才是专门匹配索引标签的工具:

test_set_duck_ids = [3022, 3090]
test_ducks = ducks.loc[test_set_duck_ids]

运行这段代码,就能精准选中索引标签为3022和3090的两行啦。

再给你明确下两者的核心区别,避免以后再搞混:

  • iloc:只认位置顺序,比如iloc[[0]]选的永远是第一行,不管这行的索引标签是2381还是其他数值。
  • loc:只认索引标签,直接匹配你设置的索引列的具体值,完全符合你想要的「按duck_ids选行」的需求。

要是你验证一下的话,运行上面的loc代码会得到这样的结果:

titles  DuckForce_kN
duck_ids                                             
3022                      Lady Tufted         44331
3090  The Right Honourable Field Marshall Lord Professor Shoveller      99999999

备注:内容来源于stack exchange,提问作者acolls_badger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 18:53:03