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

pandas结合loc与iloc提取指定行触发索引过多报错问题

问题解决

报错原因

iloc要求传入的行索引是一维的整数/整数列表,你报错的核心是传入了嵌套的索引结构:

  • 你通过index.tolist()获取到的变量A本身就是列表类型,哪怕仅匹配到"Inventories"所在的第56行,A的实际值是[56],而非整数56
  • 当你写df.iloc[[0,1,A]]时,实际传入的参数是[0,1,[56]],属于二层嵌套列表,不符合iloc的传参规则,因此触发索引器错误;你手动替换为整数56时,传入的是一维列表[0,1,56],符合传参要求所以能正常运行。
  • 你最早写的df.iloc[[0,1,[A]]]嵌套层级更深,必然报错。

正确写法

场景1:确定"Inventories"仅对应唯一一行

直接取匹配结果的第一个元素拿到整数行号即可,代码如下:

df.columns = df.iloc[1]
first_col = df.columns[0]
# 直接取匹配到的第一个行索引的整数值
inv_row = df.index[df[first_col] == 'Inventories'][0]
df = df.iloc[[0, 1, inv_row]]

场景2:不确定匹配行数,需要提取所有值为"Inventories"的行

先拼接固定行和匹配到的行索引,组成一维列表后再传入iloc:

df.columns = df.iloc[1]
first_col = df.columns[0]
inv_rows = df.index[df[first_col].isin(['Inventories'])].tolist()
# 拼接为一维索引列表
selected_rows = [0, 1] + inv_rows
df = df.iloc[selected_rows]

补充说明:如果你的DataFrame索引不是默认的整数位置索引,用df.index.get_loc(xxx)拿位置索引会更稳妥,避免索引标签值和位置值不一致导致的取数错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:03:21