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

为何无法对pandas DataFrame列使用负索引取值?

问题原因

你遇到的问题本质是pandas索引规则和Python原生列表的索引规则不一致,核心逻辑如下:

  • 执行a["Column A"]会得到一个pandas Series对象,对Series直接使用[]做索引时,默认优先匹配行标签(label),而非行的位置序号。
  • 你构建的DataFrame使用默认整数行索引,标签值为0、1、2:
    • a["Column A"][2]能返回7,是因为存在值为2的行标签,刚好对应值为7的行,匹配成功。
    • a["Column A"][-1]运行失败,是因为当前行索引里不存在值为-1的标签,pandas不会像Python列表那样把-1自动识别为“倒数第一个位置”,找不到对应标签自然报错。
  • 你使用的[列名][行号]属于链式索引,是pandas官方不推荐的写法,不仅容易混淆标签、位置的匹配逻辑,赋值时还可能触发SettingWithCopyWarning,出现修改值不生效的问题。

补充:如果DataFrame的行索引是非整数类型(比如字符串索引),对Series传入整数索引时,pandas会因为找不到匹配的整数标签,隐式退回到按位置匹配的逻辑,此时[-1]可能可以拿到最后一个值,但这种隐式转换逻辑极易触发不可预期的bug,永远不要依赖这个特性写代码。

正确取数方式

要稳定获取某列最后一个元素,使用pandas官方提供的位置索引器.iloc即可,它严格按照位置序号做索引,支持负数代表倒数位置:

# 获取最后一行、Column A列对应的值
a.iloc[-1, a.columns.get_loc("Column A")]

如果需要按行标签取值,推荐使用标签索引器.loc,逻辑清晰不会出现标签/位置混淆的问题:

# 获取行标签为2、Column A列对应的值
a.loc[2, "Column A"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:18:52