如何修复:只能比较具有相同标签的串行对象
使用 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:操作数无法与形状一起广播