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。