从数据帧列表中获取数据帧的索引时出错 - python

问题描述 投票:0回答:1

我正在尝试从列表中获取值(数据帧)的索引。 问题是,如果我正在寻找恰好位于索引 0 中的值,它就可以工作,否则就会出错。

这是我正在尝试做的一个例子:

a = [1,2,3,4,5]
b = [6,7,8,9,0]
c = []
df1 = pd.DataFrame(a)
df2 = pd.DataFrame(b)
c.append(df1)
c.append(df2)
print("c", c)
print("Frame1", c.index(df1))
print("Frame2", c.index(df2))

这是我运行最后一行时遇到的错误:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

具体错误是什么以及应该做什么?

python dataframe list indexing valueerror
1个回答
0
投票

该错误是由于 Python 在内部如何使用 == 运算符查找列表中是否存在项目而产生的。

当您调用 c.index(df2) 方法时,Python 内部使用 == 运算符来检查 df2 是否与 c 列表中的任何项目匹配。此比较对于第一个数据帧 df1 效果很好,因为它是列表中的第一项。但对于第二个数据帧 df2,Python 尝试使用 == 运算符将其与 df1 进行比较,然后再在第二个位置找到匹配项。

当两个数据帧与 == 运算符进行比较时,它返回另一个布尔值数据帧,而不是单个布尔值。此行为会导致 Python 引发 ValueError,指出 DataFrame 的真值不明确。

要解决此问题,您可以使用自定义函数覆盖相等性检查:

def get_index(lst, frame):
    for i, f in enumerate(lst):
        if (f == frame).all().all():
            return i
    raise ValueError("DataFrame not found in list")

a = [1,2,3,4,5]
b = [6,7,8,9,0]
c = []
df1 = pd.DataFrame(a)
df2 = pd.DataFrame(b)
c.append(df1)
c.append(df2)
print("c", c)
print("Frame1", get_index(c, df1))
print("Frame2", get_index(c, df2))

这里, get_index 函数迭代数据帧列表并检查每个项目是否相等。如果找到匹配项,它将返回索引。

© www.soinside.com 2019 - 2024. All rights reserved.