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

如何在元组索引的DataFrame中获取单行数据?

问题描述

我创建了这样一个pandas DataFrame:

import pandas as pd
f = pd.DataFrame.from_dict({"r0":{"c0":1,"c1":2},("r",1):{"c0":3,"c1":4}},orient="index")

输出的DataFrame如下:

c0  c1
r0       1   2
(r, 1)   3   4

我可以用list(f.loc["r0"].items())获取第一行,得到[('c0', 1), ('c1', 2)],但用f.loc[("r",1)]获取第二行时会抛出KeyError。我尝试了list(f.loc[[("r",1)]].iloc[0].items())这种繁琐的方式实现,想知道有没有更简洁的正确做法?另外,我不想使用MultiIndex。

解决方案

出现这个问题的原因是:当索引中混合了字符串和元组类型时,pandas的loc在直接查找元组索引时,可能会误将其当作MultiIndex的层级参数处理,从而抛出KeyError。以下是两种更简洁的解决方法:

  1. 使用index.get_loc()获取位置后用iloc
    通过f.index.get_loc(("r",1))拿到目标索引对应的行位置,再用iloc获取整行,最后转成键值对列表:
list(f.iloc[f.index.get_loc(("r",1))].items())
# 输出:[('c0', 3), ('c1', 4)]
  1. 用squeeze()简化你的原有方法
    你的原有方法可以通过squeeze()将单行DataFrame转为Series,省去iloc[0]的步骤:
list(f.loc[[("r",1)]].squeeze().items())
# 输出:[('c0', 3), ('c1', 4)]

另外需要注意:确保你传入的元组与索引中的元组完全一致(比如元素的类型、内容,元组的括号和逗号格式),可以通过print(f.index)查看索引的具体内容,确认匹配后再进行查找。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:32:05