列出两个数据帧中不匹配的行

时间:2019-03-04 02:16:47

标签: python-3.x dataframe merge

Raw1

      Name     Age    Height
0    Ronaldo   25     189.0
1    Honey     26     193.0
2    Kola      14     200.0
3    Tree      19     155.0
4    Rot       22     165.0
5    Rat       28     170.0
6    Toy       30     172.0
7    Raft      32     156.0
8    Rifle     28     165.0

Raw2

     Name      Age     Height
0   Ronaldo    25      189.0
1   Honey      26      NaN
2   Kola       14      200.0
3   Tree       0       155.0
4   Rot        22      NaN
5   NaN        28      170.0
6   Toy        30      172.0
7   Raft       32      156.0
8   Rifle      28      165.0

我想列出这两个数据框之间不匹配的行。但是,我只能通过right_index通过合并列出匹配的行。

raw4=pd.merge(raw1,raw2, on=['Name','Age','Height'], right_index=True)

当前输出

     Name  Age  Height
0  Ronaldo 25   189.0
2  Kola    14   200.0
6  Toy     30   172.0
7  Raft    32   156.0
8  Rifle   28   165.0

预期产量

     Name    Age  Height
1   Honey    26   NaN
3   Tree     0    155.0
4   Rot      22   NaN

1 个答案:

答案 0 :(得分:2)

您可以按元素方式比较DataFrame,然后检查其中任何一项不同的那些行:

indexes = (raw1 != raw2).any(axis=1)
raw4 = raw2.loc[indexes]

输出:

    Name  Age  Height
1  Honey   26     NaN
3   Tree    0   155.0
4    Rot   22     NaN
5    NaN   28   170.0

请注意,如果raw1raw2的值都为NaN,则此方法将不起作用(NaN始终与任何数字不同,包括{{1} }。