熊猫“只能比较标记相同的DataFrame对象”错误

发布于 2021-01-29 16:41:11

我正在使用Pandas比较加载到两个数据帧(uat,prod)中的两个文件的输出:…

uat = uat[['Customer Number','Product']]
prod = prod[['Customer Number','Product']]
print uat['Customer Number'] == prod['Customer Number']
print uat['Product'] == prod['Product']
print uat == prod

The first two match exactly:
74357    True
74356    True
Name: Customer Number, dtype: bool
74357    True
74356    True
Name: Product, dtype: bool

对于第三次打印,我得到一个错误:只能比较标记相同的DataFrame对象。如果前两个比较好,第三个有什么问题?

谢谢

关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是一个小例子来说明这一点(仅适用于DataFrames,不适用于Series,直到Pandas 0.19都适用于两者):

    In [1]: df1 = pd.DataFrame([[1, 2], [3, 4]])
    
    In [2]: df2 = pd.DataFrame([[3, 4], [1, 2]], index=[1, 0])
    
    In [3]: df1 == df2
    Exception: Can only compare identically-labeled DataFrame objects
    

    一种解决方案是先对索引进行排序(注意:某些函数需要对索引进行排序):

    In [4]: df2.sort_index(inplace=True)
    
    In [5]: df1 == df2
    Out[5]: 
          0     1
    0  True  True
    1  True  True
    

    注意:对列的顺序==也很敏感,因此您可能必须使用sort_index(axis=1)

    In [11]: df1.sort_index().sort_index(axis=1) == df2.sort_index().sort_index(axis=1)
    Out[11]: 
          0     1
    0  True  True
    1  True  True
    

    注意:这仍然可以提高(如果排序后索引/列的标签不相同)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看