pandas中的merge()函数主要用于根据一个或多个键将不同的DataFrame合并到一起,类似于SQL中的 JOIN操作
基本语法
pd.merge(left, right, how=’inner’, on=None, left_on=None, right_on=None)
参数说明:
left和right指定两个要合并的DataFrame
how指定合并方式,参数有inner/outer/left/rght
on指定用于连接的列名
left_on/right_on分别指定左右DataFrame用于连接的列名
简单示例:
import pandas as pd
# 创建两个DataFrame
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value': [4, 5, 6]})
# 使用merge函数合并
result = pd.merge(df1, df2, on='key')
print(result)
以上例子中,使用了内连接inner合并了两个DataFrame,这会只保留两个DataFrame中key列都存在的行(两个DataFrame的指定列标签下,有重复的元素,重复元素所在的行被保留)
how参数
‘inner’内连接只保留两个DataFrame中键列都存在的行
‘outer’外连接会保留两个DataFrame中的所有行,如果某个DataFrame中没有对应的值,则填充NaN
‘left’左连接保留DataFrame(第一个df)的所有行,如果右侧DataFrame没有对应订单值,则填充NaN
‘right’右连接保留右侧DataFrame(第二个df)的所有行,如果左侧DataFrame没有对应的值,则填充NaN
on参数
on参数用来指定根据哪些列来合并两个DataFrame
1.单列合并
这是最简单的情况,两个DataFrame有一个相同名称的列作为合并键
import pandas as pd
df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value2': [4, 5, 6]})
result = pd.merge(df1, df2, on='key')
print(result)
输出
key value1 value2
0 A 1 4
1 B 2 5
2.多列合并
如果两个DataFrame有多个名称相同的列,可以用列表指定多个合并键
df1 = pd.DataFrame({'key1': ['A', 'B', 'C'], 'key2': [1, 2, 3], 'value1': [100, 200, 300]})
df2 = pd.DataFrame({'key1': ['A', 'B', 'D'], 'key2': [1, 2, 4], 'value2': [400, 500, 600]})
result = pd.merge(df1, df2, on=['key1', 'key2'])
print(result)
输出:
key1 key2 value1 value2
0 A 1 100 400
1 B 2 200 500
3.不同列名合并
如果两个DataFrame的合并键列名不同,就不能直接使用on参数,这时需要left_on和right_on参数
df1 = pd.DataFrame({'key_a': ['A', 'B', 'C'], 'value1': [1, 2, 3]})
df2 = pd.DataFrame({'key_b': ['A', 'B', 'D'], 'value2': [4, 5, 6]})
result = pd.merge(df1, df2, left_on='key_a', right_on='key_b')
print(result)
输出:
key_a value1 key_b value2
0 A 1 A 4
1 B 2 B 5
4.索引合并
如果要根据DataFrame的索引进行合并,可以使用left_index=True 和/或 right_index=True
df1 = pd.DataFrame({'value1': [1, 2, 3]}, index=['A', 'B', 'C'])
df2 = pd.DataFrame({'value2': [4, 5, 6]}, index=['A', 'B', 'D'])
result = pd.merge(df1, df2, left_index=True, right_index=True)
print(result)
输出:
value1 value2
A 1 4
B 2 5
5.混合索引和列合并
可以同时使用索引和列作为合并键
df1 = pd.DataFrame({'key': ['X', 'Y', 'Z'], 'value1': [1, 2, 3]}, index=['A', 'B', 'C'])
df2 = pd.DataFrame({'value2': [4, 5, 6]}, index=['A', 'B', 'D'])
result = pd.merge(df1, df2, left_index=True, right_index=True)
print(result)
输出:
key value1 value2
A X 1 4
B Y 2 5
6.没有指定on参数
如果不指定on参数,merge函数会尝试使用两个DataFrame中所有相同的列名作为合并键
df1 = pd.DataFrame({'key1': ['A', 'B', 'C'], 'key2': [1, 2, 3], 'value1': [100, 200, 300]})
df2 = pd.DataFrame({'key1': ['A', 'B', 'D'], 'key2': [1, 2, 4], 'value2': [400, 500, 600]})
result = pd.merge(df1, df2)
print(result)
输出:
key1 key2 value1 value2
0 A 1 100 400
1 B 2 200 500
注意事项
如果没有指定on参数,且两个DataFrame没有相同的列名,merge将会报错
使用on参数时,指定的列必须在两个DataFrame中都存在
当时会用多个列作为合并键时,这些列的组合值必须是唯一的,否则可能会得到意料之外的结果