如何修复:只能比较具有相同标签的串行对象


使用 pandas 时可能遇到的错误是:

 ValueError : Can only compare identically-labeled DataFrame objects

当您尝试比较两个 pandas DataFrame 并且索引标签或列标签不完全匹配时,会发生此错误。

以下示例展示了如何在实践中纠正此错误。

如何重现错误

假设我们有以下两个 panda DataFrame:

 import pandas as pd

#define DataFrames
df1 = pd. DataFrame ({' points ': [25, 12, 15, 14],
                   ' assists ': [5, 7, 13, 12]})

df2 = pd. DataFrame ({' points ': [25, 12, 15, 14],
                    ' assists ': [5, 7, 13, 12]},
                     index=[3, 2, 1, 0])

#view DataFrames
print (df1)

   assist points
0 25 5
1 12 7
2 15 13
3 14 12

print (df2)

   assist points
3 25 5
2 12 7
1 15 13
0 14 12

请注意,列标签匹配,但索引标签不匹配。

如果我们尝试比较两个 DataFrame,我们将收到错误:

 #attempt to compare the DataFrames
df1 = df2

ValueError : Can only compare identically-labeled DataFrame objects

如何修复错误

我们可以使用几种方法来解决此错误。

方法1:比较DataFrames(包括索引标签)

我们可以使用以下语法来比较两个 DataFrame,看看它们是否完美匹配(包括索引标签):

 df1. equals (df2)

False

这告诉我们两个 DataFrame 并不完全匹配(包括索引标签)。

方法 2:比较 DataFrame(忽略索引标签)

我们可以使用以下语法来比较两个 DataFrame,看看它们是否完美匹配,同时完全忽略索引标签:

 df1. reset_index (drop= True ). equals ( df2.reset_index (drop= True ))

True

这告诉我们两个 DataFrame 完美匹配(忽略索引标签)。

方法3:逐行比较DataFrame

我们可以使用以下语法逐行比较两个DataFrame,看看哪些行值匹配:

 df1. reset_index (drop= True ) == df2. reset_index (drop= True )

      assist points
0 True True
1 True True
2 True True
3 True True

这使我们能够查看每行中有哪些值匹配。

其他资源

以下教程解释了如何修复 Python 中的其他常见错误:

如何修复 Pandas 中的 KeyError
如何修复:ValueError:无法将 float NaN 转换为 int
如何修复:ValueError:操作数无法与形状一起广播

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注