Pandas实现两个表的连接功能的方法详解

  • Post category:Python

Pandas是Python中常用的处理数据的库之一,其中常用的操作之一是连接不同的表格。在Pandas中,可以通过多种方式来实现表格间的连接。本文将详细讲解Pandas实现两个表的连接功能的方法,包含以下几个方面:

  1. 连接方式
  2. 连接函数
  3. 示例说明

1. 连接方式

在Pandas中,提供了多种类型的连接方式,主要包括以下几种:

  • 内连接(inner join):两个表中都有的记录会被保留下来,没有匹配上的记录将被删除。
  • 左连接(left join):以左边的表为基础,将右边的表中符合条件的记录拼接上。若右边没有符合条件的记录,其对应的字段会被赋值为NULL或NaN。
  • 右连接(right join):以右边的表为基础,将左边的表中符合条件的记录拼接上。若左边没有符合条件的记录,其对应的字段会被赋值为NULL或NaN。
  • 外连接(outer join):以两个表的并集为基础,将符合条件的记录拼接上。若没有匹配上的记录,其对应的字段会被赋值为NULL或NaN。

2. 连接函数

在Pandas中,可以通过merge函数来实现表格的连接。merge函数的具体用法如下:

pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

参数说明:

  • left:左边的表格。
  • right:右边的表格。
  • how:连接方式,包括’inner’, ‘outer’, ‘left’, ‘right’。
  • on:连接的键,可以是一个Label或者Label的列表。
  • left_on:左边表格连接的键,可以是一个Label或者Label的列表。
  • right_on:右边表格连接的键,可以是一个Label或者Label的列表。
  • left_index:是否使用左边表格的索引作为连接键。
  • right_index:是否使用右边表格的索引作为连接键。
  • sort:是否根据连接键对表格进行排序。
  • suffixes:连接重复列名时,加在列名后的后缀名。
  • copy:是否复制数据。
  • indicator:在连接结果中是否添加 _merge 列,标识记录是否在左表中、右表中或者左右表中均有出现。
  • validate:验证连接方式是否有效。

3. 示例说明

以下将通过两个示例来说明merge函数的具体使用方法。

示例一

现有如下两个表格,其中第一个表格包含员工信息,第二个表格包含员工的工作信息。

import pandas as pd

df1 = pd.DataFrame({'员工编号': ['A01', 'A02', 'A03', 'A04'],
                    '姓名': ['张三', '李四', '王五', '赵六'],
                    '性别': ['男', '女', '女', '男'],
                    '年龄': [23, 30, 25, 32],
                    '所属部门': ['技术部', '人事部', '市场部', '财务部']})

df2 = pd.DataFrame({'员工编号': ['A01', 'A02', 'A03', 'A05'],
                    '工作状态': ['在职', '离职', '在职', '在职'],
                    '入职时间': ['2018-10-01', '2016-05-01', '2019-03-01', '2017-12-01'],
                    '离职时间': [None, '2019-08-01', None, None]})

现需要将这两个表格按照员工编号进行连接,得到如下结果:

result = pd.merge(df1, df2, how='left', on='员工编号')
print(result)

输出结果如下:

  员工编号  姓名 性别  年龄 所属部门 工作状态        入职时间       离职时间
0  A01  张三  男  23  技术部  在职  2018-10-01        None
1  A02  李四  女  30  人事部  离职  2016-05-01  2019-08-01
2  A03  王五  女  25  市场部  在职  2019-03-01        None
3  A04  赵六  男  32  财务部  NaN         NaN        NaN

示例二

现有如下两个表格,其中第一个表格包含订单信息,第二个表格包含客户信息。

import pandas as pd

df3 = pd.DataFrame({'订单号': ['O001', 'O002', 'O003', 'O004', 'O005'],
                    '客户编号': ['C001', 'C003', 'C002', 'C004', 'C002'],
                    '下单时间': ['2019-01-01', '2019-02-02', '2019-03-03', '2019-04-04', '2019-05-05']})

df4 = pd.DataFrame({'客户编号': ['C001', 'C002', 'C003', 'C005'],
                    '客户姓名': ['张三', '李四', '王五', '赵六'],
                    '地址': ['北京', '上海', '广州', '深圳']})

现需要将这两个表格按照客户编号进行连接,得到如下结果:

result2 = pd.merge(df3, df4, how='left', on='客户编号')
print(result2)

输出结果如下:

   订单号 客户编号       下单时间 客户姓名  地址
0  O001  C001  2019-01-01    张三  北京
1  O002  C003  2019-02-02    王五  广州
2  O003  C002  2019-03-03    李四  上海
3  O004  C004  2019-04-04   NaN  NaN
4  O005  C002  2019-05-05    李四  上海

以上两个示例展示了Pandas的merge函数在实际数据处理中的具体应用。根据不同的数据结构和处理需求,还有其他不同的连接方式和参数设置,在使用时需要根据实际情况进行选择。