关键词

详解Pandas merge合并操作的4种方法

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

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

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

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

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

展开阅读全文