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)
其中各参数的含义为:
left
和right
:要合并的两个数据集。how
:合并方式,有 inner(默认)、outer、left 和 right 四种。inner 表示只保留两个数据集中交集数据,outer 表示保留两个数据集中所有数据,left 表示保留左边数据集的所有数据,同时保留右边数据集中和左边数据集中键匹配的数据,right 同理。on
:用于连接两个数据集的共同列名,可以是一列或多列。left_on
和right_on
:分别为左边数据集和右边数据集用于连接的列名。left_index
和right_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。