在使用pandas时,你可能遇到的一个错误是。
ValueError: Can only compare identically-labeled DataFrame objects
当你试图比较两个pandas DataFrames,而索引标签或列标签不完全匹配时,就会发生这个错误。
下面的例子展示了如何在实践中解决这个错误。
如何重现该错误
假设我们有以下两个pandas DataFrames。
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)
points assists
0 25 5
1 12 7
2 15 13
3 14 12
print(df2)
points assists
3 25 5
2 12 7
1 15 13
0 14 12
请注意,列的标签是匹配的,但是索引的标签却不匹配。
如果我们试图比较这两个DataFrames,我们会收到一个错误。
#attempt to compare the DataFrames
df1 = df2
ValueError: Can only compare identically-labeled DataFrame objects
如何修复这个错误
我们可以用几种方法来解决这个错误。
方法1:比较DataFrames(包括索引标签)。
我们可以使用下面的语法来比较两个DataFrames,看它们是否完全匹配(包括索引标签)。
df1.equals(df2)
False
这告诉我们这两个DataFrames并不完全匹配(包括索引标签)。
方法2:比较DataFrames(忽略索引标签)
我们可以使用下面的语法来比较两个DataFrames,看它们是否完全匹配,同时完全忽略掉索引标签。
df1.reset_index(drop=True).equals(df2.reset_index(drop=True))
True
这告诉我们,这两个DataFrames完全匹配(不考虑索引标签)。
方法3:逐行比较DataFrames
我们可以使用下面的语法来逐行比较两个DataFrames,看看哪些行的值是匹配的。
df1.reset_index(drop=True) == df2.reset_index(drop=True)
points assists
0 True True
1 True True
2 True True
3 True True
这样我们就可以看到每一行中哪些值是匹配的。
其他资源
下面的教程解释了如何修复Python中的其他常见错误。
如何修复Pandas中的KeyError
如何修复。ValueError: 无法将浮点数NaN转换为整数
如何修复。ValueError:操作数不能与形状一起广播
The postHow to Fix:只能比较标记相同的系列对象出现在Statology上。