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

为何Pandas多索引下loc会返回单行DataFrame而非Series?

Pandas多索引loc查询返回类型不一致问题

我有两个从CSV读取的、带有(str, int)类型多索引的DataFrame:

data1 = pd.read_csv(file1, sep=";", index_col=['pdf_name', 'page'])
data2 = pd.read_csv(file2, sep=";", index_col=['pdf_name', 'page'])
idx = data1.index[0]  # 首个索引:('0147S00044', 0)
data1.loc[idx]  # 如预期返回Series
data2.loc[idx]  # 返回1×N的DataFrame
data2['col1'].loc[idx]  # 返回含1个值的Series
data2.loc[idx[0]].loc[idx[1]]  # 返回Series——这与直接用data2.loc[idx]有何不同?
data2['col1'].loc[idx[0]].loc[idx[1]]  # 返回实际值

Pandas文档描述的是data1的行为,符合预期,但data2的表现却不符合预期。

可复现示例

import pandas as pd
from io import StringIO

file1 = StringIO("pdf_name;page;col1;col2\npdf1;0;val1;val2\npdf2;0;asdf;ffff")
file2 = StringIO("pdf_name;page;col1;col2\npdf1;0;;\npdf2;0;;\npdf2;0;;")
data1 = pd.read_csv(file1, sep=";", index_col=['pdf_name', 'page'])
data2 = pd.read_csv(file2, sep=";", index_col=['pdf_name', 'page'])
data2 = data2.sort_index()  # 避免性能警告
idx = data1.index[0]
print(idx)  # ('pdf1', 0)
print("data1.loc[idx]", type(data1.loc[idx]))  # data1.loc[idx] <class 'pandas.core.series.Series'>
print("data2.loc[idx]", type(data2.loc[idx]))  # data2.loc[idx] <class 'pandas.core.frame.DataFrame'>
print("data2.loc[idx].shape", data2.loc[idx].shape)  # (1, 2)  -- 单行
print("data2['col1'].loc[idx]", type(data2['col1'].loc[idx]))  # data2['col1'].loc[idx] <class 'pandas.core.series.Series'>

我发现只要数据集存在至少两行重复索引,即使查询的索引本身没有重复,也会出现这种情况。这是Pandas的预期行为吗?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:05:01