如何使用python比较两个数据帧并获得不匹配的行?
我有两个数据帧,df1和df2。现在,df1包含6条记录,df2包含4条记录。我想从中找出不匹配的记录。我试过了,但得到了一个错误如何使用python比较两个数据帧并获得不匹配的行?,python,pandas,dataframe,indexing,rows,Python,Pandas,Dataframe,Indexing,Rows,我有两个数据帧,df1和df2。现在,df1包含6条记录,df2包含4条记录。我想从中找出不匹配的记录。我试过了,但得到了一个错误ValueError:只能比较标签相同的数据帧对象我想这是由于df的长度,因为df1有6个,df2有4个,但是我如何比较它们并获得不匹配的行 代码 其中: ValueError: Can only compare identically-labelled DataFrame objects 预期产出: a b c 0 1 2 3 1 4 5 6 我知
ValueError:只能比较标签相同的数据帧对象
我想这是由于df的长度,因为df1有6个,df2有4个,但是我如何比较它们并获得不匹配的行
代码
其中:
ValueError: Can only compare identically-labelled DataFrame objects
预期产出:
a b c
0 1 2 3
1 4 5 6
我知道错误是由于长度造成的,但有没有办法比较两个数据帧并从中获取不匹配的记录?与indicator=True
一起使用,并选择除两者之外的所有行:
In [173]: df = df1.merge(df2, indicator=True, how='outer').query('_merge != "both"').drop('_merge', 1)
In [174]: df
Out[174]:
a b c
0 1 2 3
1 4 5 6
与indicator=True一起使用
,并拾取除两行之外的所有行
:
In [173]: df = df1.merge(df2, indicator=True, how='outer').query('_merge != "both"').drop('_merge', 1)
In [174]: df
Out[174]:
a b c
0 1 2 3
1 4 5 6
multi-index.from_-frame
+isin
我们可以使用多索引。从df1
和df2
上的_frame
创建相应的多索引,然后使用isin
在df2
创建的index
中测试从df1
创建的索引的成员资格,以创建一个布尔掩码,该掩码随后可用于过滤不匹配的行
i1 = pd.MultiIndex.from_frame(df1)
i2 = pd.MultiIndex.from_frame(df2)
df1[~i1.isin(i2)]
结果
multi-index.from_-frame
+isin
我们可以使用多索引。从df1
和df2
上的_frame
创建相应的多索引,然后使用isin
在df2
创建的index
中测试从df1
创建的索引的成员资格,以创建一个布尔掩码,该掩码随后可用于过滤不匹配的行
i1 = pd.MultiIndex.from_frame(df1)
i2 = pd.MultiIndex.from_frame(df2)
df1[~i1.isin(i2)]
结果
其中一个逻辑可以是检查两行中的每一行。然后使用np.setdiff1d
我们将使用set diff1dnp.setdiff1d([0,1,2,3,4,5],[np.where(np.all(df1==df2.iloc[x],axis=1))[0][0]表示范围(4)])
其中一个逻辑可以检查两行中的每一行。然后使用np.setdiff1d
我们将使用set diff1dnp.setdiff1d([0,1,2,3,4,5],[np.where(np.all(df1==df2.iloc[x],axis=1))[0][0]表示范围(4)]