Pandas自定义整数/非整数索引的负索引机制疑问
Pandas负索引的逻辑解析
先看你给出的两个示例:
第一个示例代码:
temp = pd.Series(np.random.randint(1, 10, 5), index=['John', 'Joe', 'Bob', 'Alice', 'Kris']) temp[-1]
这段代码能输出Kris对应的值,核心原因是:当Series的自定义索引为非整数类型时,Pandas会将负整数解析为位置索引。因为索引里没有-1这个字符串标签,Pandas自动 fallback 到位置逻辑,-1就代表最后一个位置的元素,对应索引Kris的值。
第二个示例代码:
temp2 = pd.Series(['John', 'Joe', 'Bob', 'Alice', 'Kris'], index=[5, 6, 7, 8, 9]) temp2[-1]
这里抛出KeyError,是因为当自定义索引是整数类型时,Pandas会把单个整数严格当作标签索引处理。你的索引里没有-1这个值,自然找不到对应元素,报错是必然的。
针对你的疑问补充两点:
-1不是先取自定义索引的最后一个元素再作为标签传入,而是直接作为位置索引生效(仅当索引非整数时);- 你遗漏的关键点是:Pandas对整数类型索引和非整数类型索引的优先级规则不同——整数索引下,标签索引优先级别最高,不会触发位置索引;非整数索引下,若找不到对应标签,才会尝试用位置索引解析负整数。
如果想在整数索引的Series里按位置取最后一个元素,应该用明确的位置索引方法.iloc[-1],比如:
temp2.iloc[-1] # 会输出'Kris'
内容的提问来源于stack exchange,提问作者dumaloo
相关产品推荐
相关产品推荐

