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

列表中DataFrame调用index方法报错,如何获取其索引?

问题:获取列表中DataFrame的索引报错

我有一个包含多个DataFrame的列表,想获取它们在列表中的索引。相关代码如下:

import pandas as pd
import numpy as np

I0 = pd.DataFrame({'Eng': [11], 
                  'Fr': [10], 
                  'It': [9],
                  'Sp': [11],
                  'Jp': [12]
                  })
I1 = pd.DataFrame({'Eng': [9], 
                  'Fr': [4], 
                  'It': [9],
                  'Sp': [11],
                  'Jp': [15]
                  })
I = [I0, I1]

执行I.index(I0)能正确返回0,但执行I.index(I1)时出现错误。我试过以下操作都没解决:

  • 调换DataFrame在列表中的位置,错误依旧;
  • 改用元组或集合替代列表,错误依旧;
  • 调整列表中DataFrame的顺序,错误依旧。

想问有没有其他方法可以获取列表中DataFrame的索引?


解决方法

原因分析

列表的index()方法依赖元素的相等性判断,但Pandas的DataFrame直接用==判断时,会返回布尔值组成的DataFrame而非单个布尔值,导致index()无法正确匹配元素,从而报错。

可行方案

方案1:用DataFrame.equals()遍历匹配

Pandas提供了专门判断两个DataFrame是否完全相等的equals()方法,直接遍历列表匹配即可:

def get_df_index(df_list, target_df):
    for idx, df in enumerate(df_list):
        if df.equals(target_df):
            return idx
    return -1  # 未找到时返回-1

# 使用示例
print(get_df_index(I, I0))  # 输出0
print(get_df_index(I, I1))  # 输出1

方案2:通过哈希值匹配

计算每个DataFrame的哈希值,通过哈希值对比来确定索引:

import pandas.util.hash_pandas_object as hash_pd

def get_df_index(df_list, target_df):
    target_hash = hash_pd(target_df).sum()
    for idx, df in enumerate(df_list):
        if hash_pd(df).sum() == target_hash:
            return idx
    return -1

# 使用示例
print(get_df_index(I, I0))  # 输出0
print(get_df_index(I, I1))  # 输出1

方案3:提前给DataFrame添加标识属性

如果可以提前处理DataFrame,给每个对象添加自定义属性标记索引,后续直接读取即可:

# 初始化时添加索引属性
I0._list_idx = 0
I1._list_idx = 1
I = [I0, I1]

# 直接获取索引
print(I0._list_idx)  # 输出0
print(I1._list_idx)  # 输出1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:28:24