使用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
相关产品推荐
相关产品推荐

