使用merge()函数连接两个Pandas DataFrames的过程如下:
准备数据
假设我们有两个数据集,分别是employees和departments。employees数据集包含雇员的基本信息,而departments数据集包含部门的基本信息。
import pandas as pd
# 定义employees数据集
employees = pd.DataFrame({
'id': [1, 2, 3, 4],
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'department_id': [1, 2, 2, 3],
})
# 定义departments数据集
departments = pd.DataFrame({
'id': [1, 2, 3],
'name': ['Sales', 'Marketing', 'Engineering'],
})
连接两个数据集
使用merge()函数连接两个数据集,代码如下:
# 连接两个数据集
merged = pd.merge(employees, departments, left_on='department_id', right_on='id')
# 查看连接结果
print(merged)
此时会输出一个新的DataFrame,包含了雇员的基本信息和部门的名称。
id_x name department_id id_y name_y
0 1 Alice 1 1 Sales
1 2 Bob 2 2 Marketing
2 3 Charlie 2 2 Marketing
3 4 David 3 3 Engineering
重命名列名
为了更好的可读性,我们可以将列名进行重命名,代码如下:
# 重命名列名
merged = merged.rename(columns={'id_x': 'employee_id', 'name': 'employee_name', 'id_y': 'department_id', 'name_y': 'department_name'})
# 查看连接结果
print(merged)
此时会输出一个新的DataFrame,包含了重命名后的列名。
employee_id employee_name department_id department_name
0 1 Alice 1 Sales
1 2 Bob 2 Marketing
2 3 Charlie 2 Marketing
3 4 David 3 Engineering
首先解释参数
- left: 合并的左侧DataFrame对象。
- right: 合并的右侧DataFrame对象。
- on: 它是用于连接两个DataFrame的列名。这里有两个DataFrame可以共同指定。
- left_on: 左侧DataFrame对象的用作连接键的列。
- right_on: 右侧DataFrame对象的用作连接键的列。
- left_index: 如果为True,则使用左侧DataFrame对象的索引(行标签)作为其连接键。
- right_index: 与left_index功能类似,只不过使用的是右侧DataFrame对象的索引。
- how: Type of merge to be performed。left、right、outer、inner。默认为内连接 inner,上述示例均为内连接。
- suffixes: 字符串值,表示重复的列名的后缀,默认为_x、_y。
merge练习
我们再来做一个例子,此例连接两个数据集sales和sales_targets,代码如下:
# 定义sales数据集
sales = pd.DataFrame({
'employee': ['Alice', 'Bob', 'Charlie', 'David'],
'product': ['Product A', 'Product B', 'Product C', 'Product D'],
'sales': [100, 200, 150, 300],
})
# 定义sales_targets数据集
sales_targets = pd.DataFrame({
'employee': ['Alice', 'Charlie', 'David', 'Edward'],
'product': ['Product A', 'Product C', 'Product D', 'Product E'],
'target': [150, 200, 250, 100],
})
# 连接两个数据集
merged = pd.merge(sales, sales_targets, on=['employee', 'product'], how='left')
# 查看连接结果
print(merged)
此时会输出一个新的DataFrame,包含了销售记录和销售目标的信息。
employee product sales target
0 Alice Product A 100 150.0
1 Bob Product B 200 NaN
2 Charlie Product C 150 200.0
3 David Product D 300 250.0
在这个例子中,我们连接了两个数据集,并使用了左侧连接(left join),连接键为员工和产品,连接方式为内连接(inner join),重复列的后缀为「_x」和「_y」。左侧数据集sales包含了所有的销售记录,而右侧数据集sales_targets仅包含了销售目标。通过左连接,我们可以在结果中看到所有的销售记录,同时也可以看到有销售目标的记录。那些没有销售目标的记录被填充为「NaN」。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用merge()连接两个Pandas DataFrames - Python技术站