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

pandas按name列筛选DataFrame正常,按sn列筛选报KeyError如何修复

问题产生原因

执行df.set_index('sn', inplace=True)代码时,pandas默认会将sn列从普通数据列移除,设置为DataFrame的行索引。此时sn不属于df.columns的列集合,因此使用列取值语法df['sn']时,pandas无法在列中找到对应字段,直接抛出KeyError: 'sn'异常。
name字段始终是普通数据列,从未被设置为索引,因此df['name']的取值逻辑可以正常运行。

排查这类列不存在的KeyError时,可以先执行print(df.columns)查看当前所有有效列名,执行print(df.index)确认当前索引内容,快速定位问题。

修复方案

根据实际使用场景,任选以下一种方案即可:

  • 方案1:直接按行索引做筛选,不需要取列
    针对索引做等值匹配可以直接用.loc定位,代码如下:
    # 匹配索引值为'016'的行
    df.loc[df.index == '016']
    
    纯等值匹配场景可以简化写法,直接传入索引值列表:df.loc[['016']]
  • 方案2:设置索引时保留原sn列
    如果既需要用sn做索引,又需要保留该列做筛选,可以在set_index时传入drop=False参数:
    # 重新设置索引,设置时保留sn作为普通列
    df.set_index('sn', inplace=True, drop=False)
    # 后续即可正常使用列筛选语法
    df[df['sn'] == '016']
    
  • 方案3:将索引重置为普通列后再筛选
    如果不需要sn作为行索引,可以直接重置索引,把sn转回普通数据列:
    # 重置索引,sn恢复为普通列
    df.reset_index(inplace=True)
    # 执行原筛选语句即可正常运行
    df[df['sn'] == '016']
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:54:32