本文目录导读:

我来详细讲解Pandas中数据合并的几种主要方法,并配有实际案例。
准备示例数据
首先创建几个用于演示的数据集:
import pandas as pd
# 员工基本信息表
df_employee = pd.DataFrame({
'员工ID': ['E001', 'E002', 'E003', 'E004'],
'姓名': ['张三', '李四', '王五', '赵六'],
'部门': ['技术部', '市场部', '财务部', '技术部']
})
print("员工基本信息表:")
print(df_employee)
# 员工薪资表
df_salary = pd.DataFrame({
'员工ID': ['E001', 'E002', 'E003', 'E005'],
'月薪': [15000, 12000, 18000, 14000],
'入职日期': ['2023-01-15', '2023-02-20', '2023-03-10', '2023-04-01']
})
print("\n员工薪资表:")
print(df_salary)
# 部门信息表
df_dept = pd.DataFrame({
'部门': ['技术部', '市场部', '财务部', '人事部'],
'部门负责人': ['张经理', '李经理', '王经理', '刘经理'],
'办公地点': ['A栋3楼', 'B栋2楼', 'A栋5楼', 'C栋1楼']
})
print("\n部门信息表:")
print(df_dept)
纵向合并 (concat)
适用于行方向合并数据:
# 创建两个季度的销售数据
df_q1 = pd.DataFrame({
'月份': ['1月', '2月', '3月'],
'销售额': [100, 150, 200],
'季度': ['Q1', 'Q1', 'Q1']
})
df_q2 = pd.DataFrame({
'月份': ['4月', '5月', '6月'],
'销售额': [180, 220, 250],
'季度': ['Q2', 'Q2', 'Q2']
})
# 纵向合并
df_year = pd.concat([df_q1, df_q2], ignore_index=True)
print("纵向合并后的全年数据:")
print(df_year)
# 处理多个DataFrame
df_q3 = pd.DataFrame({
'月份': ['7月', '8月', '9月'],
'销售额': [210, 190, 230],
'季度': ['Q3', 'Q3', 'Q3']
})
df_all = pd.concat([df_q1, df_q2, df_q3], ignore_index=True)
print("\n前三季度数据:")
print(df_all)
横向合并 (merge)
1 内连接 (inner join)
# 内连接:只保留匹配的记录
df_inner = pd.merge(df_employee, df_salary, on='员工ID', how='inner')
print("内连接结果:")
print(df_inner)
2 左连接 (left join)
# 左连接:保留左边表的所有记录
df_left = pd.merge(df_employee, df_salary, on='员工ID', how='left')
print("左连接结果:")
print(df_left)
3 右连接 (right join)
# 右连接:保留右边表的所有记录
df_right = pd.merge(df_employee, df_salary, on='员工ID', how='right')
print("右连接结果:")
print(df_right)
4 外连接 (outer join)
# 外连接:保留所有记录
df_outer = pd.merge(df_employee, df_salary, on='员工ID', how='outer')
print("外连接结果:")
print(df_outer)
多键合并
# 创建更复杂的数据表
df_orders = pd.DataFrame({
'订单号': ['ORD001', 'ORD002', 'ORD003'],
'客户ID': ['C001', 'C002', 'C001'],
'产品': ['产品A', '产品B', '产品C'],
'金额': [500, 300, 800]
})
df_customers = pd.DataFrame({
'客户ID': ['C001', 'C002', 'C003'],
'客户名': ['小明', '小红', '小刚'],
'城市': ['北京', '上海', '广州']
})
# 多键合并
df_order_detail = pd.merge(
df_orders,
df_customers,
on='客户ID',
how='left'
)
print("\n订单详细信息:")
print(df_order_detail)
连接部门信息
# 将员工表与部门表连接
df_employee_detail = pd.merge(
df_employee,
df_dept,
on='部门',
how='left'
)
print("员工部门详细信息:")
print(df_employee_detail)
# 还可以链式合并多个表
df_complete = df_employee_detail.merge(
df_salary,
on='员工ID',
how='left'
)
print("\n完整的员工信息表:")
print(df_complete)
实战案例:销售数据分析
# 创建销售相关数据
df_products = pd.DataFrame({
'产品ID': ['P001', 'P002', 'P003', 'P004'],
'产品名': ['笔记本电脑', '手机', '平板', '耳机'],
'类别': ['电子产品', '电子产品', '电子产品', '配件']
})
df_sales = pd.DataFrame({
'订单ID': ['S001', 'S002', 'S003', 'S004', 'S005'],
'产品ID': ['P001', 'P002', 'P001', 'P003', 'P005'],
'数量': [2, 3, 1, 5, 2],
'单价': [5000, 3000, 5000, 2000, 500],
'日期': ['2024-01-15', '2024-01-16', '2024-01-17', '2024-01-18', '2024-01-19']
})
df_stores = pd.DataFrame({
'店铺ID': ['ST01', 'ST02', 'ST03'],
'店铺名': ['旗舰店', '分店A', '分店B'],
'城市': ['北京', '上海', '广州']
})
# 合并分析数据
# 1. 销售明细与产品信息合并
df_sales_detail = pd.merge(
df_sales,
df_products,
on='产品ID',
how='left'
)
# 2. 计算销售金额
df_sales_detail['销售金额'] = df_sales_detail['数量'] * df_sales_detail['单价']
# 3. 按类别汇总
sales_summary = df_sales_detail.groupby('类别').agg({
'销售金额': 'sum',
'数量': 'sum'
}).reset_index()
print("销售明细:")
print(df_sales_detail)
print("\n销售汇总(按类别):")
print(sales_summary)
高级合并技巧
1 指定连接键的左右列名
# 当连接键的列名不同时
df_left = pd.DataFrame({
'key1': ['A', 'B', 'C'],
'value1': [1, 2, 3]
})
df_right = pd.DataFrame({
'key2': ['A', 'B', 'D'],
'value2': [4, 5, 6]
})
# 使用left_on和right_on指定不同的列名
df_merged = pd.merge(
df_left,
df_right,
left_on='key1',
right_on='key2',
how='inner'
)
print("指定不同列名合并:")
print(df_merged)
2 索引合并
# 使用索引作为连接键
df_left_idx = df_employee.set_index('员工ID')
df_right_idx = df_salary.set_index('员工ID')
df_idx_merge = pd.merge(
df_left_idx,
df_right_idx,
left_index=True,
right_index=True
)
print("\n使用索引合并:")
print(df_idx_merge)
Pandas数据合并的主要方法:
- pd.concat():纵向或横向合并多个DataFrame
- pd.merge():类似SQL的JOIN操作
- merge各种连接方式:
- inner:交集
- left:左连接
- right:右连接
- outer:并集
- 多键合并:使用多个列作为连接键
- 索引合并:使用索引作为连接键
这些方法可以灵活处理各种数据合并需求,是数据清洗和分析中非常重要的技能。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播