Pandas 中的 Join 和 Merge 有什麼區別
在 Pandas 中,Series
或 DataFrame
可以使用諸如 join
和 merge
等各種操作輕鬆加入或組合。這些操作根據索引和列名組合了兩個 DataFrame。join
和 merge
方法都可以組合兩個 DataFrame。join 和 merge 操作的主要區別在於 join
方法根據它們的索引組合兩個 DataFrame,而在 merge
方法中,我們需要指定列來組合兩個 DataFrame。
本文將討論 pandas python 中 join
和 merge
方法的區別。
Pandas DataFrame .join
方法
join
方法在它們的索引上連線兩個 DataFrame
。讓我們舉個例子來展示 join
方法的工作原理。我們採用了兩個 DataFrame:left_df
和 right_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_on
和 left_on
引數分別指定它。請參閱以下示例,其中我們使用了不同的引數,例如 on
、left_on
、right_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 中的 join
和 merge
之間的區別。我們已經看到這兩種方法,join
和 merge
用於類似的目的,在 pandas 中結合 DataFrames。但是,不同之處在於 join
方法在它們的 indexed
上組合了兩個 DataFrame,而在 merge
方法中,我們指定列名來組合兩個 DataFrame。