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

Pandas Series索引赋值一处报KeyError一处正常的原因

问题复现

将代码拆分为3个独立块在Jupyter中运行,效果如下:

  • 第一个代码块:初始化测试用的Series对象
import pandas as pd
data = pd.Series([1,2,3,4,5], index=['a', 'b', 'c', 7, 8])
data

运行输出:

a    1
b    2
c    3
7    4
8    5
dtype: int64
  • 第二个代码块:用字符串键赋值
data['g']=5 # 无报错
data

运行输出:

a    1
b    2
c    3
7    4
8    5
g    5
dtype: int64

可以看到Series末尾正常新增了索引为g的元素。

  • 第三个代码块:用整数键赋值
data[9] = 7 # 触发报错

运行后抛出错误:IndexError: index 9 is out of bounds for axis 0 with size 6

报错原因

核心是Pandas方括号[]操作符,在处理混合类型索引(索引同时包含字符串、整数两类标签)的Series时,对不同类型入参的判定逻辑不一致:

  • 传入字符串类型的键时,Pandas默认走标签索引逻辑:如果键不在现有索引中,直接作为新标签追加到Series末尾,不做额外校验,因此data['g']=5可以正常执行。
  • 传入整数类型的键时,Pandas会优先走位置索引逻辑(和iloc的规则一致,从0开始按元素排列顺序计数):此时不会先校验整数是否存在于标签列表,而是先判断整数是否超出当前Series的位置范围。执行完第二行赋值后,Series总长度为6,合法位置索引范围是0~5,传入的9超出范围,直接触发位置越界错误,不会进入新增标签的逻辑分支。

如果确实要新增标签为整数9的元素,需要显式用loc声明走标签索引逻辑,代码如下:

data.loc[9] = 7

运行后就可以正常在Series末尾追加对应元素。


内容的提问来源于stack exchange,提问作者stories shubham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:18:16