Pandas 中的 Join 和 Merge 有什麼區別

  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。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe

相關文章 - Pandas DataFrame