gpt4 book ai didi

python - 无法从数据帧列表中获取索引位置

转载 作者:行者123 更新时间:2023-12-04 02:57:18 25 4
gpt4 key购买 nike

我试图通过使用 python 中的内置方法索引从数据帧列表中获取数据帧的位置。我的代码如下:

df1 = pd.DataFrame([1, 2, 3])
df2 = pd.DataFrame([4, 5, 6])
df3 = pd.DataFrame([7, 8, 9])

dfs = [df1, df2, df3]
for df in dfs:
print(dfs.index(df))

它没有得到预期的 0、1 和 2,而是只返回 0,然后是 ValueError:

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

我知道这个错误通常来自数据帧比较,我尝试添加 .all() 但无济于事。

如果我将列表更改为类似字符串、整数或它们的混合的列表,没有任何问题。

我尝试四处搜索,但没有发现任何关于这个特定错误的信息。

我知道我可以很容易地添加一个额外的变量,它会为列表的每次迭代持续添加 1,但我真的很想了解我做错了什么。

最佳答案

正如其他人所说,您可以使用 enumerate 来做您想做的事。

至于为什么您尝试的方法不起作用:

list.index(item) 查找列表中满足 element == item 的第一个元素。例如考虑 df = dfs[0]。当我们调用dfs.index(df)时,我们首先检查df ==是否是dfs的第一个元素。换句话说,我们正在检查是否 df == df。如果你在你的解释器中输入这个,你会发现这给了你一个 TrueDataFrame。这是一个 DataFrame 对象——但 Python 想知道的是它是否应该将此对象视为 True。所以它需要将这个 DataFrame 转换成一个单独的 bool。它尝试通过 bool(df == df) 执行此操作,它依赖于 pandas 实现一种将任何 DataFrame 转换为 的方法> bool 。然而,没有这样的方法,并且有充分的理由——因为正确的方法是不明确的。所以此时 pandas 引发了您看到的错误。

总而言之:要让index有意义,对象必须有一些相等的概念(==),但是DataFrame不有这样的想法,这是有充分理由的。

如果在以后的问题中您需要在 DataFrame 列表中找到 DataFrame 的索引,您首先必须决定相等的概念。一个明智的想法是,如果所有值都相同。然后你可以定义一个函数:

def index(search_dfs, target_df):
for i, search_df in enumerate(search_dfs):
if (search_df.values == target_df.values).all():
return i
return ValueError('DataFrame not in list')

index(dfs, df[2])
Out: 2

关于python - 无法从数据帧列表中获取索引位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52383473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com