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

使用pandas concat指定keys后按键取数返回KeyError的问题

问题原因

你调用pd.concat设置axis=0(行方向拼接)时,传入的keys参数会被设置为结果DataFrame行多层索引的最上层,而非列名。你使用total["a"]是尝试检索名称为a的列,而你的结果DataFrame只有no_1、no_2两列,因此触发KeyError。

解决方案

根据不同使用场景,可选择对应方案:

  • 直接按键提取对应行数据(符合你原本的预期)
    使用.loc按行索引检索即可:
    import pandas as pd
    lists = pd.DataFrame({ "no_1": [1,2,3,4]})
    x = pd.DataFrame( {"no_2": [3,3,4,5]})
    total = pd.concat([lists, x], axis=0, keys=["a", "b"])
    print(total.loc["a"])
    
    输出结果如下:
    no_1  no_2
    0   1.0   NaN
    1   2.0   NaN
    2   3.0   NaN
    3   4.0   NaN
    
  • 如果你需要用total["a"]的语法提取数据
    可以改为列方向拼接(axis=1),此时keys会成为列多层索引的最上层:
    total = pd.concat([lists, x], axis=1, keys=["a", "b"])
    print(total["a"])
    
  • 如果你想把key值转为普通列方便后续筛选
    可以重置索引把key值导出为单独列:
    total = pd.concat([lists, x], axis=0, keys=["a", "b"], names=["my_key"]).reset_index(level="my_key")
    # 之后可以按列筛选a对应的数据
    print(total[total["my_key"] == "a"])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:54:03