为何pandas中两次引用Series(第二次带方括号)时索引编号发生变化
Pandas Series 方括号索引运行机制解答
不存在行截断、索引搜索偏移的情况,两次返回结果一致完全是嵌套取值的计算逻辑导致的,逐行拆解执行过程就能看明白:
- 你通过列表
[1,2,3,4]创建test3时,没有指定自定义索引,Pandas会自动生成从0开始递增的整数索引,此时Series的索引和值的映射关系为:- 索引标签
0→ 存储值1 - 索引标签
1→ 存储值2 - 索引标签
2→ 存储值3 - 索引标签
3→ 存储值4
- 索引标签
- 第一处取值
test3[3]的逻辑非常直接:方括号传入整数3时,会优先匹配索引标签等于3的条目,对应取出存储值4,所以第一次打印取值结果为4。 - 第二处取值
test3[test3[2]]是嵌套表达式,Python会优先计算最内层的代码,不存在特殊的索引规则:- 先执行内层的
test3[2]:匹配索引标签为2的条目,返回存储的整数值3 - 内层计算完成后,整个表达式等价于
test3[3],和上一行的取值语句完全一致,自然返回的结果也是4。
- 先执行内层的
*补充说明:很多新手会误以为Pandas方括号传整数是按位置取数,实际上对于整数类型的索引,方括号默认优先匹配索引标签,只有当传入的整数不在索引标签范围内时,才会触发版本相关的回退逻辑,生产环境更建议明确用loc按标签取、iloc按位置取,避免歧义。你这个测试用例里默认索引的标签刚好和位置下标从0开始一一对应,所以不容易察觉到嵌套计算的过程。
内容的提问来源于stack exchange,提问作者anumberofthem
相关产品推荐
相关产品推荐

