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)
输出:
检查两个数据框是否完全相同
通过使用 equals()函数,我们可以直接检查 df1 是否等于 df2。此函数用于确定考虑中的两个数据帧对象是否相等。与 dataframe.eq() 方法不同,操作的结果是一个标量布尔值,指示数据帧对象是否相等。
句法:
DataFrame.equals(df)
例子:
蟒蛇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)
输出: