详解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 则保留左右两个数据集中所有的记录并将能够匹配到的记录合并到一起。

在实际的数据处理中,选择不同的合并方式可以帮助我们更好地理解和分析数据。

此文章发布者为:Python技术站作者[metahuber],转载请注明出处:https://pythonjishu.com/pandas-merge-4-method/

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年 3月 5日 下午8:59
下一篇 2023年 3月 5日 下午9:14

相关推荐

  • Pandas读取文件数据常用的5种方法

    当使用 Pandas 做数据分析的时,需要读取事先准备好的数据集,这是做数据分析的第一步。 Panda 提供了很多读取数据的方法: pd.read_csv():读取CSV文件 pd.read_excel():读取Excel文件 pd.read_sql():读取SQL数据库中的数据 pd.read_json():读取JSON文件 pd.read_html():…

    Pandas 2023年 3月 6日
    00
  • Pandas是什么?Pandas的特点与优势

    Pandas 是一个开源的第三方 Python 库,从 Numpy 和 Matplotlib 的基础上构建而来,享有数据分析“三剑客之一”的盛名(NumPy、Matplotlib、Pandas)。目前,Pandas 已经成为 Python 数据分析的必备高级工具,它的目标是成为强大、灵活、可以支持任何编程语言的数据分析工具。 Pandas 最初由 Wes M…

    2023年 3月 4日
    00
  • Pandas 最常用的两种排序方法

    Pandas提供了两种排序方式:按标签排序和按数值排序。 按标签排序 按标签排序使用 .sort_index() 方法,可以按照索引的标签进行排序,默认为升序排列。例如: import pandas as pd # 创建一个示例DataFrame df = pd.DataFrame({'col1': [3, 1, 2], 'co…

    Pandas 2023年 3月 5日
    00
  • Pandas 执行类似SQL操作的4种方法

    Pandas是数据处理中不可或缺的工具之一,除了数据的读写、清洗、转换等基本操作,Pandas还支持一些类似SQL的操作,而这些操作对于熟悉SQL的用户来说,极大地方便了数据的操作和分析。 Pandas提供的SQL类操作主要包括以下几种方法: merge: 将两个DataFrame按照指定的列进行合并(类似于SQL中的join操作)。 groupby: 对D…

    Pandas 2023年 3月 7日
    00
  • Pandas 最常用的6种遍历方法

    遍历是众多编程语言中必备的一种操作,比如 Python 语言通过 for 循环来遍历列表结构。而在 Pandas 中同样也是使用 for 循环进行遍历,通过for遍历后,Series 可直接获取相应的 value,而 DataFrame 则会获取列标签。 以下是最常用的几种遍历方法: for 循环遍历每一行/列 使用 for 循环可以遍历 DataFrame…

    Pandas 2023年 3月 4日
    00
  • Pandas loc、iloc用法详解

    Pandas中的loc和iloc都是用来选择数据的方法,主要作用是在DataFrame中根据行、列的标签或位置进行数据的选择和切片。 具体来说,loc通过标签选择数据,iloc通过位置选择数据。loc和iloc都可以使用切片和布尔索引,还支持多层索引和高级索引等操作。 下面详细介绍一下这两种方法的用法: loc方法 loc方法是通过行标签和列标签来访问数据的…

    Pandas 2023年 3月 5日
    00
  • Pandas对象使用自定义函数的3个方法!

    Pandas为什么要使用自定义函数? 使用自定义函数可以让我们更灵活地对数据进行处理和分析。在某些情况下,内置的函数可能无法满足我们的需求,例如需要进行特定的数据清洗、转换或计算。这时候,我们可以编写自己的函数来处理数据。同时,自定义函数也可以让我们更好地复用代码,提高开发效率。 接下来我们将详细介绍Pandas使用自定义函数的4种方法。 Pandas使用自…

    Pandas 2023年 3月 4日
    00
  • 详解Pandas concat连接操作的5种使用方法

    Pandas中的concat函数可以将多个数据框(DataFrame)按照一定的方式拼接在一起,这个函数的使用非常广泛,可以用来进行数据的横向和纵向拼接操作。本文将详细介绍concat函数的用法及注意事项。 concat函数基本用法 concat函数的基本用法如下: pd.concat(objs, axis=0, join=’outer’, ignore_i…

    Pandas 2023年 3月 6日
    00
  • Pandas使用的注意事项

    Pandas 基于 NumPy 构建,它遵循 NumPy 设定的一些规则。因此,当您在使用 Pandas 时,需要额外留意一些事项,避免出现一些不必要的错误。 索引 Pandas有两种主要的索引机制:整数和标签索引,需要非常注意索引的使用。 整数索引:通过整数索引进行访问数据,如果未指定索引,Pandas将默认生成一个整数索引,但当使用整数索引时,需要特别小…

    Pandas 2023年 3月 7日
    00
  • Pandas最常用的7种字符串处理方法

    Pandas是一个强大的数据处理工具,除了能处理数值和时间序列等数据类型外,还能够方便地处理字符串数据。 常用的字符串处理函数如下表所示: 函数名称 函数功能说明 lower() 将的字符串转换为小写。 upper() 将的字符串转换为大写。 len() 得出字符串的长度。 strip() 去除字符串两边的空格(包含换行符)。 split() 用指定的分割符…

    Pandas 2023年 3月 5日
    00