如何使用 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 中的值不被視為相等。

結論

總之,Pandas 庫提供了一個名為“compare”的便捷功能,使資料分析師和科學家能夠快速識別和突出顯示兩個 DataFrame 之間的差異。“compare”方法提供了根據特定需求自定義比較過程的靈活性。此外,Pandas 提供了各種其他方法和工具來滿足不同的資料分析和處理需求。因此,掌握 Pandas 技能對於尋求有效處理和分析大型資料集的資料專業人員來說可能是一個巨大的優勢。

更新於: 2023年7月20日

960 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告