Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python比较两个数据帧并获得不匹配的行?_Python_Pandas_Dataframe_Indexing_Rows - Fatal编程技术网

如何使用python比较两个数据帧并获得不匹配的行?

如何使用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 我知

我有两个数据帧,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
我知道错误是由于长度造成的,但有没有办法比较两个数据帧并从中获取不匹配的记录?

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 diff1d
np.setdiff1d([0,1,2,3,4,5],[np.where(np.all(df1==df2.iloc[x],axis=1))[0][0]表示范围(4)])
其中一个逻辑可以检查两行中的每一行。然后使用
np.setdiff1d
我们将使用set diff1d
np.setdiff1d([0,1,2,3,4,5],[np.where(np.all(df1==df2.iloc[x],axis=1))[0][0]表示范围(4)]