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
相关产品推荐
相关产品推荐

