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