Pandas – 查找两个数据帧之间的差异
在这篇文章中,我们将讨论如何在pandas中比较两个DataFrames。首先,让我们创建两个DataFrames。
创建两个数据框架。
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)
输出:
检查两个数据帧是否完全相同
通过使用equals()函数,我们可以直接检查df1是否等于df2。这个函数被用来确定考虑中的两个数据框架对象是否相等。与dataframe.eq()方法不同的是,该操作的结果是一个标量布尔值,表明数据框架对象是否相等。
语法:
DataFrame.equals(df)
示例:
df1.equals(df2)
输出:
False
我们也可以对某一列进行检查。
示例:
df2['Age'].equals(df1['Age'])
输出:
False
寻找两个DataFrames之间的共同行
我们可以使用merge()函数或concat()函数。
- merge()函数是DataFrame对象之间所有标准数据库连接操作的入口。合并函数类似于SQL内部连接,我们在两个数据框架之间找到共同的行。
- concat()函数完成了所有繁重的工作,与axisod Pandas对象一起执行连接操作,同时对其他axis上的索引(如果有的话)执行可选的集合逻辑(union或intersection)。
实例1:使用合并函数
df = df1.merge(df2, how = 'inner' ,indicator=False)
df
输出:
例子2:使用concat函数
我们使用concat函数将第二个数据框架(df2)添加到第一个数据框架(df1)下面。然后我们使用列对新的数据框架进行分组,然后我们看到哪些行的计数大于1,这些是常见的行。这就是我们如何使用
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)
输出:
寻找两个数据框架之间不常见的行。
我们已经看到,我们如何在两个数据框架之间获得共同的行。现在,对于不常见的行,我们可以使用带参数drop_duplicate的concat函数。
示例:
pd.concat([df1,df2]).drop_duplicates(keep=False)
输出: