📜  Pandas – 找出两个数据帧之间的差异

📅  最后修改于: 2022-05-13 01:55:21.930000             🧑  作者: Mango

Pandas – 找出两个数据帧之间的差异

在本文中,我们将讨论如何比较 pandas 中的两个 DataFrame。首先,让我们创建两个 DataFrame。

创建两个数据框

Python3
import pandas as pd
  
  
# first dataframe
df1 = pd.DataFrame({
    'Age': ['20', '14', '56', '28', '10'],
    'Weight': [59, 29, 73, 56, 48]})
display(df1)
  
# second dataframe
df2 = pd.DataFrame({
    'Age': ['16', '20', '24', '40', '22'],
    'Weight': [55, 59, 73, 85, 56]})
display(df2)


Python3
df1.equals(df2)


Python3
df2['Age'].equals(df1['Age'])


Python3
df = df1.merge(df2, how = 'inner' ,indicator=False)
df


Python3
df = pd.concat([df1, df2])
  
df = df.reset_index(drop=True)
  
df_group = df.groupby(list(df.columns))
  
idx = [x[0] for x in df_group.groups.values() if len(x) > 1]
df.reindex(idx)


Python3
pd.concat([df1,df2]).drop_duplicates(keep=False)


输出:

comapre数据框熊猫python



检查两个数据框是否完全相同

通过使用 equals()函数,我们可以直接检查 df1 是否等于 df2。此函数用于确定考虑中的两个数据帧对象是否相等。与 dataframe.eq() 方法不同,操作的结果是一个标量布尔值,指示数据帧对象是否相等。

句法:

例子:

蟒蛇3

df1.equals(df2)

输出:

False

我们还可以检查特定的列。

例子:



蟒蛇3

df2['Age'].equals(df1['Age'])

输出:

False

查找两个 DataFrame 之间的公共行

我们可以使用merge()函数或concat()函数。

  • merge()函数用作 DataFrame 对象之间所有标准数据库连接操作的入口点。合并函数类似于 SQL 内连接,我们找到两个数据帧之间的公共行。
  • concat()函数执行与轴 od Pandas 对象一起执行串联操作的所有繁重工作,同时在其他轴上执行索引(如果有)的可选设置逻辑(联合或交集)。

示例 1:使用合并函数

蟒蛇3

df = df1.merge(df2, how = 'inner' ,indicator=False)
df

输出:

示例 2:使用 concat函数

我们使用 concat函数在第一个数据帧(df1)下方添加第二个数据帧(df2)。然后我们使用列对新数据框进行分组,然后我们查看哪些行的计数大于 1。这些是常见的行。这就是我们可以使用的方式-

蟒蛇3



df = pd.concat([df1, df2])
  
df = df.reset_index(drop=True)
  
df_group = df.groupby(list(df.columns))
  
idx = [x[0] for x in df_group.groups.values() if len(x) > 1]
df.reindex(idx)

输出:

查找两个 DataFrame 之间的不常见行

我们已经看到了如何获得两个数据帧之间的公共行。现在对于不常见的行,我们可以使用带有参数 drop_duplicate 的 concat函数。

例子:

蟒蛇3

pd.concat([df1,df2]).drop_duplicates(keep=False)

输出: