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


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

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

基本语法

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

df1.compare(df2, **kwargs)

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

示例

让我们从一个简单的示例开始。假设我们有两个 DataFrame,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]})

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

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

输出

这将输出以下结果

   A  B     
  -3  6  7
  +4  0  1

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

示例

以下是如何使用 Pandas compare() 函数比较两个 DataFrame 的另一个示例

import pandas as pd # Create two dataframes to compare df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df2 = pd.DataFrame({'A': [1, 2, 4], 'B': [4, 5, 7]}) # Compare the two dataframes using the compare() function comparison = df1.compare(df2) # Print the comparison print(comparison)

输出

这将输出以下结果

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

compare() 函数生成一个新的 DataFrame,显示 df1 和 df2 之间的差异。生成的 DataFrame 以 - 为前缀的行表示相应的值存在于 df1 中,但不存在于 df2 中。而以 + 为前缀的行表示相应的值存在于 df2 中,但不存在于 df1 中。此外,结果 DataFrame 中包含了差异列的列标题,以便于理解。

参数和选项

compare() 函数有几个参数和选项,允许在比较 DataFrame 时更灵活。让我们看看其中的一些。

‘keep_shape’

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

示例

这是一个示例

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 参数负责确定比较的 DataFrame 是否必须在比较的列中包含等效的值。默认情况下,此参数设置为 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() 函数比较两个 DataFrame 时,列中具有不同类型的值将不被视为相等。例如,当比较 df1 和 df2 时,列 A 第二行下的 +1 表示 df2 中的值比 df1 大一。这是因为 df2 中的值是浮点数,而 df1 中的值是整数。同样,列 A 第三行下的 -0 表示 df2 中的值比 df1 小零,因为 df2 中的值是整数,而 df1 中的值是浮点数。

‘keep_shape’ 和 ‘keep_equal’

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

示例

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 中的值不被视为相等。

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

结论

总之,Pandas 库提供了一个名为“compare”的便捷功能,使数据分析师和科学家能够快速识别和突出显示两个 DataFrame 之间的差异。“compare”方法提供了根据特定需求自定义比较过程的灵活性。此外,Pandas 提供了各种其他方法和工具来满足不同的数据分析和处理需求。因此,掌握 Pandas 技能对于寻求有效处理和分析大型数据集的数据专业人员来说可能是一个巨大的优势。

更新于: 2023年7月20日

960 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告