Pandas 中的 Join 和 Merge 有什麼區別

Samreena Aslam 2023年1月30日 2022年5月16日
  1. Pandas DataFrame .join 方法
  2. Pandas DataFrame .merge 方法
  3. まとめ
Pandas 中的 Join 和 Merge 有什麼區別

在 Pandas 中,SeriesDataFrame 可以使用諸如 joinmerge 等各種操作輕鬆加入或組合。這些操作根據索引和列名組合了兩個 DataFrame。joinmerge 方法都可以組合兩個 DataFrame。join 和 merge 操作的主要區別在於 join 方法根據它們的索引組合兩個 DataFrame,而在 merge 方法中,我們需要指定列來組合兩個 DataFrame。

本文將討論 pandas python 中 joinmerge 方法的區別。

Pandas DataFrame .join 方法

join 方法在它們的索引上連線兩個 DataFrame。讓我們舉個例子來展示 join 方法的工作原理。我們採用了兩個 DataFrame:left_dfright_df。使用 left_df.join(right_df) 程式碼,我們組合了兩個 DataFrame。

示例程式碼:

import pandas as pd

# create two dataframe
df_left = pd.DataFrame({'Name': ['X', 'Y', 'Z'], 'Score': [10, 8, 9]}).set_index('Name')
df_right = pd.DataFrame({'Name': ['X', 'Y', 'Z'], 'Steals': [4, 5, 2]}).set_index('Name')
print(df_left)
print(df_right)

# join two dataframes
df_left.join(df_right)

輸出:

      Score
Name       
X        10
Y         8
Z         9
      Steals
Name        
X          4
Y          5
Z          2
Score	Steals
Name		
X	10	4
Y	8	5
Z	9	2

如果我們在兩個 DataFrame 中都有重疊的列,在這種情況下,連線將希望你從左側 DataFrame 中為重疊或公共列名稱新增字尾。在以下 DataFrames 中,重疊的列名稱是 C

示例程式碼:

import pandas as pd
  
# Creating the two dataframes
df_left = pd.DataFrame([['x', 1], ['y', 2]], list('AB'), list('CD'))
df_right = pd.DataFrame([['u', 3], ['v', 4]], list('AB'), list('CF'))
print(df_left)
print(df_right)
# join two dataframes
joined_df = df_left.join(df_right, lsuffix='_')
print(joined_df)

輸出:

   C  D
A  x  1
B  y  2
   C  F
A  u  3
B  v  4
  C_  D  C  F
A  x  1  u  3
B  y  2  v  4

正如你在上面的輸出中看到的那樣,索引保留了四列。我們還可以通過使用 on 引數作為連線鍵在左側 DataFrame 上單獨指定特定列。

Pandas DataFrame .merge 方法

merge 方法也用於合併兩個 DataFrame。但是,merge 方法需要列名作為合併兩個 DataFrame 的合併鍵。在下面的例子中,我們實現了簡單的合併函式來合併兩個 DataFrame 而不使用任何引數。

示例程式碼:

import pandas as pd

# create two dataframe
df_left = pd.DataFrame({'Name': ['X', 'Y', 'Z'], 'Score': [10, 8, 9]}).set_index('Name')
df_right = pd.DataFrame({'Name': ['X', 'Y', 'Z'], 'Steals': [4, 5, 2]}).set_index('Name')
print(df_left)
print(df_right)

# merge two dataframes
df_left.merge(df_right, on='Name')

輸出:

      Score
Name       
X        10
Y         8
Z         9
      Steals
Name        
X          4
Y          5
Z          2
Score	Steals
Name		
X	10	4
Y	8	5
Z	9	2

我們可以在 merge 方法中使用 on 引數指定重疊列名。在以下示例中,我們指定重疊列名稱 C 以對兩個 DataFrame 執行合併操作。

示例程式碼:

import pandas as pd
  
# Creating the two dataframes
df_left = pd.DataFrame([['x', 1], ['y', 2]], list('AB'), list('CD'))
df_right = pd.DataFrame([['u', 3], ['v', 4]], list('AB'), list('CF'))
print(df_left)
print(df_right)

# merge dataframes
merged_df = df_left.merge(df_right, on='C', how='outer')
print(merged_df)

輸出:

   C  D
A  x  1
B  y  2
   C  F
A  u  3
B  v  4
   C    D    F
0  x  1.0  NaN
1  y  2.0  NaN
2  u  NaN  3.0
3  v  NaN  4.0

使用 right_onleft_on 引數分別指定它。請參閱以下示例,其中我們使用了不同的引數,例如 onleft_onright_on,以便更好地理解。

示例程式碼:

import pandas as pd
  
# Creating the two dataframes
df_left = pd.DataFrame([['x', 1], ['y', 2]], list('AB'), list('CD'))
df_right = pd.DataFrame([['u', 3], ['v', 4]], list('AB'), list('CF'))
print(df_left)
print(df_right)
merged_df = df_left.merge(df_right, left_index=True,
                       right_index=True, suffixes=['_', ''])
print(merged_df)

輸出:

   C  D
A  x  1
B  y  2
   C  F
A  u  3
B  v  4
  C_  D  C  F
A  x  1  u  3
B  y  2  v  4

まとめ

我們通過一些示例演示了 pandas 中的 joinmerge 之間的區別。我們已經看到這兩種方法,joinmerge 用於類似的目的,在 pandas 中結合 DataFrames。但是,不同之處在於 join 方法在它們的 indexed 上組合了兩個 DataFrame,而在 merge 方法中,我們指定列名來組合兩個 DataFrame。

相關文章 - Pandas DataFrame