详解pandas.merge()(合并数据框)函数使用方法

  • Post category:Python

pandas.merge() 是 pandas 库中用于合并数据的方法,可以将多个数据集根据一个或多个公共的列或索引进行合并。

pandas.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)

其中各参数的含义为:

  • leftright:要合并的两个数据集。
  • how:合并方式,有 inner(默认)、outer、left 和 right 四种。inner 表示只保留两个数据集中交集数据,outer 表示保留两个数据集中所有数据,left 表示保留左边数据集的所有数据,同时保留右边数据集中和左边数据集中键匹配的数据,right 同理。
  • on:用于连接两个数据集的共同列名,可以是一列或多列。
  • left_onright_on:分别为左边数据集和右边数据集用于连接的列名。
  • left_indexright_index:分别表示是否使用左边数据集和右边数据集的索引作为连接,True 表示使用索引进行连接。
  • sort:表示连接后是否按照连接的键进行排序。
  • suffixes:发生重复列名时,附加到左右数据集的后缀,以区分列名。
  • copy:默认为 True,返回新的数据集。如果设置为 False,则直接修改 left 数据集。

接下来,我们通过两个实例说明 pandas.merge() 的使用方法:

实例1

假设我们有两个包含职员信息和工资信息的数据集 employee_info 和 employee_salary_info。

employee_info = pd.DataFrame({
    'employee_id': ['A001', 'A002', 'A003', 'A004'],
    'name': ['张三', '李四', '王五', '赵六'],
    'department': ['财务部', '市场部', '技术部', '人事部']
})

employee_salary_info = pd.DataFrame({
    'employee_id': ['A001', 'A002', 'A003', 'A005'],
    'salary': [5000, 6000, 7000, 8000]
})

现在,我们需要将这两个数据集按照 employee_id 列合并,即找到两个数据集中共同的列 employee_id 进行合并。使用 pandas.merge() 方法如下:

result = pd.merge(employee_info, employee_salary_info, on='employee_id', how='outer')

执行以上代码后,会得到如下结果:

   employee_id name department  salary
0         A001   张三       财务部  5000.0
1         A002   李四       市场部  6000.0
2         A003   王五       技术部  7000.0
3         A004   赵六       人事部     NaN
4         A005  NaN        NaN  8000.0

可以发现,我们使用 on 参数将两个数据集按照 employee_id 列连接起来,使用 outer 方式保留了所有数据集中的数据。

实例2

假设我们有两个包含购物者购买表和用户信息表的数据集 shopping_info 和 user_info。

shopping_info = pd.DataFrame({
    'user_id': ['001', '002', '003', '004', '005'],
    'item_id': ['001', '002', '003', '004', '005'],
    'price': [20.0, 30.0, 25.0, 40.0, 15.0]
})

user_info = pd.DataFrame({
    'user_id': ['001', '002', '003', '004'],
    'name': ['张三', '李四', '王五', '赵六'],
    'gender': ['男', '女', '男', '女'],
    'age': [25, 30, 28, 25]
})

现在,我们需要将这两个数据集合并,保留购物记录,同时加上购买者的姓名、性别和年龄。使用 pandas.merge() 方法如下:

result = pd.merge(shopping_info, user_info, on='user_id', how='left')

执行以上代码后,会得到如下结果:

  user_id item_id  price name gender   age
0     001     001   20.0   张三      男  25.0
1     002     002   30.0   李四      女  30.0
2     003     003   25.0   王五      男  28.0
3     004     004   40.0   赵六      女  25.0
4     005     005   15.0  NaN    NaN   NaN

可以发现,我们使用 on 参数将两个数据集按照 user_id 列连接起来,使用 left 方式保留购物记录,同时加入用户信息。由于第五条购物记录的 user_id 在用户信息表中不存在,因此购买者的姓名、性别和年龄均为 NaN。