在数据分析工作中,数据往往分散在多个表格中,掌握高效的数据整合技巧至关重要。本节将深入讲解Pandas中三种核心数据合并方法,帮助您轻松应对多表关联的各类场景。
本节学习目标
理解数据库连接的各种类型(inner、outer、left、right)掌握 merge 函数的全部核心参数学会使用 join 进行基于索引的关联掌握 concat 进行轴向合并能够处理多表关联和数据对齐问题
为什么学这个?
现实业务场景中的数据通常分布在多张关联表中。以典型电商系统为例:
用户表:记录用户基础信息订单表:存储交易明细数据产品表:维护商品信息
要回答"2024年购买电子产品最多的用户"这类业务问题,必须同时关联这三I张表。
Pandas提供了三种主要的数据合并方式:
merge —— 基于列值的关联(类似SQL JOIN)join —— 基于索引的关联concat —— 按轴方向拼接
核心知识点讲解
merge:基于列值的关联
merge是最常用的数据关联方法,其功能与SQL中的JOIN操作高度相似。
1. 准备示例数据
import pandas as pd
import numpy as np
# 订单表
orders = pd.DataFrame({
'订单ID': [1001, 1002, 1003, 1004, 1005],
'用户ID': [1, 2, 3, 1, 4],
'金额': [500, 300, 800, 200, 1500],
'日期': ['2024-01-15', '2024-02-20', '2024-03-10', '2024-04-05', '2024-05-18']
})
# 用户表
users = pd.DataFrame({
'用户ID': [1, 2, 3, 5],
'姓名': ['张三', '李四', '王五', '赵六'],
'城市': ['北京', '上海', '广州', '深圳']
})
# 产品表
products = pd.DataFrame({
'订单ID': [1001, 1002, 1003, 1004, 1005],
'产品名': ['手机', '耳机', '电脑', '充电器', '手表'],
'品类': ['电子产品', '配件', '电子产品', '配件', '饰品']
})
2. 内连接(inner join)
仅保留两表完全匹配的行记录。
result = pd.merge(orders, users, on='用户ID', how='inner')
3. 左连接(left join)
保留左表全部记录,右表无匹配则填充NaN。
result = pd.merge(orders, users, on='用户ID', how='left')
4. 右连接(right join)
保留右表全部记录,左表无匹配则填充NaN。
result = pd.merge(orders, users, on='用户ID', how='right')
5. 外连接(outer join)
保留两表全部记录,无匹配处填充NaN。
result = pd.merge(orders, users, on='用户ID', how='outer')
join:基于索引的关联
join是merge的特例化版本,专为基于索引的关联场景设计。
orders_idx = orders.set_index('用户ID')
users_idx = users.set_index('用户ID')
result = orders_idx.join(users_idx, lsuffix='_订单', rsuffix='_用户')
concat:轴向拼接
concat支持灵活的数据拼接方式,包括纵向和横向两种主要形式。
1. 纵向拼接(axis=0)
result = pd.concat([df1, df2])
2. 横向拼接(axis=1)
result = pd.concat([df_a, df_b], axis=1)
本节总结
通过本节学习,我们系统掌握了Pandas三大数据整合方法的核心要点和应用场景。数据合并是数据分析的基础技能,合理选择merge、join或concat方法,能够高效解决各类数据整合需求,为后续分析工作奠定坚实基础。