如何使用 Pandas Compare 比较两个 Dataframe?

pythonserver side programmingprogramming

如果您从事数据分析或数据科学工作,那么您已经知道比较 DataFrames 的重要性。幸运的是,Python 库 pandas 提供了一种方便的"比较"方法,可让您比较两个 DataFrames 并突出显示它们的差异。此方法对于识别数据集之间的差异并根据这些差异做出明智的决策非常有用。

在本文中,我们将探讨如何使用 pandas compare 比较两个 DataFrames 并深入研究一些可用的自定义选项。无论您是经验丰富的数据分析师还是新手,本文都将为您提供使用 pandas 有效且自信地使用 compare 所需的知识。

基本语法

compare() 函数的基本语法如下:

df1.compare(df2, **kwargs)

其中 df1 和 df2 是我们要比较的两个数据框。**kwargs 参数允许将各种选项和参数传递给函数。

示例

让我们从一个简单的例子开始。假设我们有两个数据框,df1 和 df2,如下所示:

import pandas as pd

df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [1, 2, 4], 'B': [4, 5, 7]})

这两个数据框具有相同的列,但值不同。我们可以使用 compare() 函数来比较这两个数据框,如下所示:

comparison = df1.compare(df2)
print(comparison)

输出

这将输出以下结果:

   A  B     
  -3  6  7
  +4  0  1

结果显示两个数据框之间的差异。A 列下方的 -3 和 6 表示 df2 中的值比 df1 中小 3,而 A 列下方的 +4 和 0 表示 df2 中的值比 df1 中大 4。相应地,B 列下的 7 和 1 表示 df2 中的值比 df1 大 1。

示例

下面是使用 pandas compare() 函数比较两个数据框的另一个示例:

import pandas as pd

# 创建两个要比较的数据框
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [1, 2, 4], 'B': [4, 5, 7]})

# 使用 compare() 函数比较两个数据框
comparison = df1.compare(df2)

# 打印比较
print(比较)

输出

这将输出以下结果:

   A      
   2  3  B
  -3  0  6
  +4  0  7

compare() 函数生成一个新的数据框,显示 df1 和 df2 之间的差异。生成的数据框在行前加上 − 前缀,以指示相应的值存在于 df1 中但不存在于 df2 中。但是,以 + 为前缀的行表示相应的值存在于 df2 中但不存在于 df1 中。此外,为清晰起见,结果数据框中还包含有差异列的列标题。

参数和选项

compare() 函数有几个参数和选项,可在比较数据框时提供更大的灵活性。让我们来看看其中的一些。

'Keep_shape'

keep_shape 参数控制比较的数据框是否应具有相同的形状。默认情况下,此参数设置为 True,这意味着比较的数据框应具有相同数量的行和列。如果设置为 False,该函数将仅比较公共列并忽略任一数据框中的任何额外列。

示例

以下是示例

df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [1, 2, 4], 'B': [4, 5, 7], 'C': [8, 9, 10]})

comparison = df1.compare(df2, keep_shape=False)
print(comparison)

输出

这将输出以下结果:

   A  B     
  -3  6  7
  +4  0  1

请注意,df2 中的额外列 C 被忽略。

'keep_equal'

keep_equal 参数负责确定比较的数据框是否必须在比较的列中包含等效值。默认情况下,此参数设置为 False,这意味着 compare() 函数将把两个值视为等效,即使它们具有不同的类型(例如 1 和 1.0)。但是,如果 keep_equal 设置为 True,则 compare() 函数将仅将类型匹配的值视为等效值。

示例

以下是示例:

df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [1.0, 2, 4], 'B': [4, 5, 7]})

comparison = df1.compare(df2, keep_equal=True)
print(comparison)

输出

这将输出以下结果:

   A        
   1  2  3
  +1  0  0
  -0  0  0

值得注意的是,当使用 compare() 函数比较两个数据框时,类型不同的列中的值将不被视为相等。例如,当比较 df1 和 df2 时,A 列第二行下方的 +1 表示 df2 中的值比 df1 中的值大一。这是因为 df2 中的值是浮点数,而 df1 中的值是整数。同样,A 列第三行下方的 −0 表示 df2 中的值比 df1 中的值小零,因为 df2 中的值是整数,而 df1 中的值是浮点数。

'keep_shape' 和 'keep_equal'

keep_shape 和 keep_equal 参数可以一起使用来控制比较数据框的形状和相等性。例如:

示例

df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'A': [1.0, 2, 4], 'B': [4, 5, 7], 'C': [8, 9, 10]})

comparison = df1.compare(df2, keep_shape=False, keep_equal=True)
print(comparison)

输出

这将输出以下结果:

   A        
   1  2  3
  +1  0  0
  -0  0  0

请注意,df2 中的额外 C 列被忽略,并且 A 列中具有不同类型的值不被视为相等。

结论

总之,Pandas 库提供了一个称为"比较"的便捷功能,使数据分析师和科学家能够快速找出并强调两个 DataFrame 之间的差异。 "比较"方法提供了灵活性,可以根据特定要求自定义比较过程。 此外,Pandas 提供了多种其他方法和工具来满足不同的数据分析和操作需求。 因此,对于寻求有效处理和分析大型数据集的数据专业人员来说,磨练 Pandas 技能可以带来显着优势。


相关文章