Pandas 如何使用Pandas中的merge函数合并数据框
在本文中,我们将介绍如何使用Pandas中的merge函数合并数据框。合并是数据分析中需要频繁使用的操作,通过合并多个数据框可以将它们的数据整合起来,方便对数据进行分析和处理。
阅读更多:Pandas 教程
merge函数概述
merge是Pandas中用于合并数据框的函数。它将两个数据框以某个共同的列为关键字进行合并,类似于SQL中的join操作。merge函数的基本语法如下:
merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False)
参数说明:
- left:要合并的左侧数据框。
- right:要合并的右侧数据框。
- how:合并方式,默认为‘inner’,其他可选项有‘outer’、‘left’、‘right’。
- on:添加用于匹配的列名,如果左右数据框都有相同的列名,则可以使用on参数。
- left_on:左侧数据框用于匹配的列名,如果两个数据框中的列名不同,则使用left_on参数。
- right_on:右侧数据框用于匹配的列名。
- left_index:使用左侧数据框的索引作为连接键。
- right_index:使用右侧数据框的索引作为连接键。
- sort:按照连接键对结果排序。
- suffixes:连接左右数据框中重叠的列名时使用的字符串后缀,默认为(‘_x’, ‘_y’)。
- copy:是否对合并的数据进行拷贝。
- indicator:显示合并方式,默认为False。
merge的操作
接着我们来介绍一些常用merge的操作。
内连接
内连接(inner join)只保留两个数据框都有的行,相当于两个数据框的交集,用how=’inner’参数实现,示例如下:
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': np.random.randint(1, 10, 4)})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': np.random.randint(1, 10, 4)})
res = pd.merge(df1, df2, on='key', how='inner')
print(res)
输出结果如下:
key value_x value_y
0 B 2 2
1 D 7 8
左连接
左连接(left join)以左侧数据框为基础,保留左侧数据框的所有行,如果右侧数据框中没有匹配的行则用空值填充,用how=’left’参数实现,示例如下:
res = pd.merge(df1, df2, on='key', how='left')
print(res)
输出结果如下:
key value_x value_y
0 A 5 NaN
1 B 2 2.0
2 C 3 NaN
3 D 7 8.0
右连接
右连接(right join)以右侧数据框为基础,保留右侧数据框的所有行,如果左侧数据框中没有匹配的行则用空值填充,用how=’right’参数实现,示例如下:
res = pd.merge(df1, df2, on='key', how='right')
print(res)
输出结果如下:
key value_x value_y
0 B 2.0 2
1 D 7.0 8
2 E NaN 4
3 F NaN 2
外连接
外连接(outer join)保留左右数据框的所有行,如果没有匹配的行则用空值填充,用how=’outer’参数实现,示例如下:
res = pd.merge(df1, df2, on='key', how='outer')
print(res)
输出结果如下:
key value_x value_y
0 A 5.0 NaN
1 B 2.0 2.0
2 C 3.0 NaN
3 D 7.0 8.0
4 E NaN 4.0
5 F NaN 2.0
多关键字合并
除了单个关键字合并外,merge函数还支持多个关键字合并,只需要将关键字名称组成一个列表传递给on参数即可,示例如下:
df3 = pd.DataFrame({'key1': ['A', 'B', 'C', 'D'], 'key2': ['E', 'F', 'G', 'H'], 'value': np.random.randint(1, 10, 4)})
df4 = pd.DataFrame({'key1': ['C', 'D', 'E', 'F'], 'key2': ['G', 'H', 'I', 'J'], 'value': np.random.randint(1, 10, 4)})
res = pd.merge(df3, df4, on=['key1', 'key2'], how='outer')
print(res)
输出结果如下:
key1 key2 value_x value_y
0 A E 3.0 NaN
1 B F 8.0 NaN
2 C G 7.0 5.0
3 D H 5.0 1.0
4 E I NaN 4.0
5 F J NaN 4.0
处理重复列名
如果左右两个数据框中存在相同列名,例如下面两个数据框:
df5 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value_left': np.random.randint(1, 10, 4)})
df6 = pd.DataFrame({'key': ['C', 'D', 'E', 'F'], 'value_right': np.random.randint(1, 10, 4)})
在合并时,我们可以使用suffixes参数对重复列名添加后缀,示例如下:
res = pd.merge(df5, df6, on='key', how='outer', suffixes=('_left', '_right'))
print(res)
输出结果如下:
key value_left value_right
0 A 2.0 NaN
1 B 5.0 NaN
2 C 4.0 2.0
3 D 1.0 2.0
4 E NaN 9.0
5 F NaN 5.0
使用索引合并
除了使用列名作为连接键外,merge函数还支持使用DataFrame的索引作为连接键。只需要将left_index和right_index参数设置为True即可,示例如下:
df7 = pd.DataFrame({'value1': np.random.randint(1, 10, 3), 'value2': np.random.randint(1, 10, 3)}, index=['A', 'B', 'C'])
df8 = pd.DataFrame({'value3': np.random.randint(1, 10, 3), 'value4': np.random.randint(1, 10, 3)}, index=['B', 'C', 'D'])
res = pd.merge(df7, df8, left_index=True, right_index=True, how='outer')
print(res)
输出结果如下:
value1 value2 value3 value4
A 3.0 2.0 NaN NaN
B 4.0 2.0 7.0 8.0
C 5.0 6.0 2.0 6.0
D NaN NaN 6.0 3.0
总结
本文介绍了Pandas中merge函数的基本用法及常见操作,通过实例演示了内连接、左连接、右连接、外连接、多关键字合并、处理重复列名和使用索引合并等操作。merge函数的强大功能提供了对数据框合并的便利支持,尤其在数据分析中,使用Pandas进行数据处理和分析时,经常需要将多个数据框进行合并。掌握merge函数的用法,将有助于提高处理数据的效率和准确性。同时,在实际操作中需要根据数据的特点和需求,选择合适的合并方式和连接键,避免出现不必要的错误和问题。
极客教程