pandas 中的 merge 函数可以将两个数据集按照指定的列进行合并,类似于 SQL 中的 join 操作。merge 函数有多种合并方式,包括 inner join、left join、right join 和 outer join 等。
下面我们就来详细介绍一下 merge 函数的使用方法。
我们首先准备两个数据集,一个是包含员工基本信息的数据集,另一个是包含员工工资信息的数据集。它们的数据结构如下:
# 创建员工基本信息数据集
employee_info = pd.DataFrame({
'employee_id': ['001', '002', '003', '004'],
'name': ['张三', '李四', '王五', '赵六'],
'age': [28, 32, 24, 36],
'gender': ['M', 'M', 'F', 'M'],
'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen']
})
# 创建员工工资信息数据集
employee_salary = pd.DataFrame({
'employee_id': ['001', '002', '004', '005'],
'salary': [8000, 9000, 7000, 7500],
'tax': [800, 900, 700, 750]
})
其中 employee_info 包含了每个员工的基本信息,employee_salary 包含了每个员工的工资信息。这两个数据集之间的连接键是 employee_id。
Inner join 是指按照连接键对两个数据集进行合并,保留两个数据集中都包含的记录。使用 merge 函数实现 inner join 的代码如下:
# 将两个数据集按照 employee_id 列进行 inner join
inner_join = pd.merge(employee_info, employee_salary, on='employee_id', how='inner')
print(inner_join)
输出结果如下:
employee_id name age gender city salary tax
0 001 张三 28 M Beijing 8000 800
1 002 李四 32 M Shanghai 9000 900
2 004 赵六 36 M Shenzhen 7000 700
可以看到,inner join 只保留了两个数据集中都包含的员工信息,即 employee_id 为 001、002 和 004 的员工信息。
Left join 是指按照连接键对两个数据集进行合并,保留左侧数据集中所有记录,并将右侧数据集中匹配到的记录合并到左侧数据集中。使用 merge 函数实现 left join 的代码如下:
# 将两个数据集按照 employee_id 列进行 left join
left_join = pd.merge(employee_info, employee_salary, on='employee_id', how='left')
print(left_join)
输出结果如下:
employee_id name age gender city salary tax
0 001 张三 28 M Beijing 8000.0 800.0
1 002 李四 32 M Shanghai 9000.0 900.0
2 003 王五 24 F Guangzhou NaN NaN
3 004 赵六 36 M Shenzhen 7000.0 700.0
可以看到,left join 保留了左侧数据集(即 employee_info)中所有的记录,并将右侧数据集(即 employee_salary)中匹配到的记录合并到了左侧数据集中。注意到这里有一条员工记录(即 employee_id 为 003 的员工)在右侧数据集中没有对应的记录,因此在合并结果中该记录的工资信息被设置为 NaN。
Right join 是指按照连接键对两个数据集进行合并,保留右侧数据集中所有记录,并将左侧数据集中匹配到的记录合并到右侧数据集中。使用 merge 函数实现 right join 的代码如下:
# 将两个数据集按照 employee_id 列进行 right join
right_join = pd.merge(employee_info, employee_salary, on='employee_id', how='right')
print(right_join)
输出结果如下:
employee_id name age gender city salary tax
0 001 张三 28.0 M Beijing 8000 800
1 002 李四 32.0 M Shanghai 9000 900
2 004 赵六 36.0 M Shenzhen 7000 700
3 005 NaN NaN NaN NaN 7500 750
Outer join 是指按照连接键对两个数据集进行合并,保留左右两个数据集中所有记录,并将能够匹配到的记录合并到一起。使用 merge 函数实现 outer join 的代码如下:
# 将两个数据集按照 employee_id 列进行 outer join
outer_join = pd.merge(employee_info, employee_salary, on='employee_id', how='outer')
print(outer_join)
输出结果如下:
employee_id name age gender city salary tax
0 001 张三 28.0 M Beijing 8000.0 800.0
1 002 李四 32.0 M Shanghai 9000.0 900.0
2 003 王五 24.0 F Guangzhou NaN NaN
3 004 赵六 36.0 M Shenzhen 7000.0 700.0
4 005 NaN NaN NaN NaN 7500.0 750.0
以上代码中,outer join 保留了左右两个数据集中所有的记录,并将能够匹配到的记录合并到一起。注意到这里有一条员工记录(即 employee_id 为 003 的员工)在右侧数据集中没有对应的记录,同时有一条工资记录(即 employee_id 为 005 的员工)在左侧数据集中没有对应的记录,因此在合并结果中这两条记录都被保留,缺失的值被填充为 NaN。
总结一下,pandas 提供了四种常见的合并方式:inner join、left join、right join 和 outer join。
其中,inner join 只保留能够匹配到的记录,left join 保留左侧数据集中所有的记录并将右侧数据集中匹配到的记录合并到左侧数据集中,right join 保留右侧数据集中所有的记录并将左侧数据集中匹配到的记录合并到右侧数据集中,outer join 则保留左右两个数据集中所有的记录并将能够匹配到的记录合并到一起。
在实际的数据处理中,选择不同的合并方式可以帮助我们更好地理解和分析数据。
本文链接:http://task.lmcjl.com/news/4544.html