当前位置: 首页 > news >正文

12. Pandas 数据合并与拼接(concat 与 merge)

Pandas 数据合并与拼接(concat 与 merge)

在数据分析中,常常需要将来自不同来源或不同维度的数据整合在一起。Pandas 提供了两种强大的数据合并工具:concatmerge。前者更适合在行或列方向上拼接 DataFrame,而后者则更接近 SQL 的表连接操作,支持多键匹配与多种连接方式。掌握它们的使用方法,是进行数据清洗与整合分析的关键步骤。


1. 使用 concat 拼接数据

concat 用于沿指定轴将多个 DataFrame 拼接起来。默认按行(axis=0)拼接,也可以按列(axis=1)拼接。

import pandas as pddf1 = pd.DataFrame({"姓名": ["张三", "李四"],"城市": ["北京", "上海"]
})df2 = pd.DataFrame({"姓名": ["王五", "赵六"],"城市": ["广州", "深圳"]
})

1.1 行拼接

当两个 DataFrame 拥有相同的列结构时,可以直接按行堆叠:

# 行拼接
df_row = pd.concat([df1, df2], axis=0)
print("按行拼接:\n", df_row)
按行拼接:姓名  城市
0  张三  北京
1  李四  上海
0  王五  广州
1  赵六  深圳

1.2 列拼接

如果要将不同列的数据拼在一起(例如补充信息列),可以按列方向拼接:

df3 = pd.DataFrame({"销售额": [100, 150],"年龄": [23, 34]
})# 按列拼接
df_col = pd.concat([df1, df3], axis=1)
print("按列拼接:\n", df_col)
按列拼接:姓名  城市  销售额  年龄
0  张三  北京  100  23
1  李四  上海  150  34

1.3 重置索引

默认会保留原索引,如果希望生成新的连续索引,可以设置 ignore_index=True

df_row_reset = pd.concat([df1, df2], axis=0, ignore_index=True)
print("重置索引:\n", df_row_reset)
重置索引:姓名  城市
0  张三  北京
1  李四  上海
2  王五  广州
3  赵六  深圳

2. 使用 merge 合并表

merge 的功能更强大,类似于 SQL 的 JOIN 操作。它允许根据一个或多个键,将不同表的数据进行行级匹配。下面通过示例展示几种常见的连接方式。

df_left = pd.DataFrame({"姓名": ["张三", "李四", "王五"],"城市": ["北京", "上海", "广州"]
})df_right = pd.DataFrame({"姓名": ["张三", "李四", "赵六"],"销售额": [100, 150, 130]
})

2.1 内连接(默认)

默认方式为内连接,即仅保留两表中键值同时存在的行:

df_inner = pd.merge(df_left, df_right, on="姓名", how="inner")
print("内连接:\n", df_inner)
内连接:姓名  城市  销售额
0  张三  北京  100
1  李四  上海  150

2.2 外连接

外连接会保留两表的所有行,缺失部分用 NaN 填充:

df_outer = pd.merge(df_left, df_right, on="姓名", how="outer")
print("外连接:\n", df_outer)
外连接:姓名   城市    销售额
0  张三   北京  100.0
1  李四   上海  150.0
2  王五   广州    NaN
3  赵六  NaN  130.0

2.3 左连接与右连接

左连接保留左表的全部行,右连接则保留右表的全部行。两者在实际数据对齐场景中十分常见。

# 左连接
df_left_join = pd.merge(df_left, df_right, on="姓名", how="left")# 右连接
df_right_join = pd.merge(df_left, df_right, on="姓名", how="right")print("左连接:\n", df_left_join)print("\n右连接\n", df_right_join)
左连接:姓名  城市    销售额
0  张三  北京  100.0
1  李四  上海  150.0
2  王五  广州    NaN右连接姓名   城市  销售额
0  张三   北京  100
1  李四   上海  150
2  赵六  NaN  130

3. 多键合并

当匹配条件涉及多个字段时,可以将 on 参数设置为列名列表。例如同时按“姓名”和“城市”进行匹配:

df_left_multi = pd.DataFrame({"姓名": ["张三", "李四", "王五"],"城市": ["北京", "上海", "广州"],"部门": ["A", "B", "A"]
})df_right_multi = pd.DataFrame({"姓名": ["张三", "李四", "王五"],"城市": ["北京", "上海", "北京"],"销售额": [100, 150, 200]
})df_multi_merge = pd.merge(df_left_multi, df_right_multi, on=["姓名", "城市"], how="inner")
print("多键合并:\n", df_multi_merge)
多键合并:姓名  城市 部门  销售额
0  张三  北京  A  100
1  李四  上海  B  150

在数据清洗与报表整合中,多键合并常用于确保匹配条件更精确,避免仅凭单字段造成误合。


4. 小结

在 Pandas 中,concat 更适合做结构相同数据的简单拼接,无论是行方向堆叠还是列方向扩展,都能快速实现。而 merge 则提供了灵活的按键合并机制,可以实现类似 SQL 的多表关联,是构建复杂数据关系的核心工具。
掌握它们的使用规律与差异,能够让你在数据整合、分析建模及报表生成中更加得心应手。

http://www.dtcms.com/a/454509.html

相关文章:

  • 23ICPC澳门站补题
  • 怎样做淘宝的导购网站推广宣传片制作网站
  • 51zwd做网站淘宝网中国站电脑版登录
  • 快速搭建网站 开源软件开发工程师多少钱一个月
  • vue知识点-列表渲染+key
  • 花茶网站模板装修全包
  • discuz企业网站模板陕西住房城乡建设网站
  • 哪些网站可以做海报网站建设需要摊销几年
  • Mac怎么搭建网站开发环境微信公众号怎么进行网站建设
  • 深圳网站设计服务公如何创建个人博客wordpress
  • 国外网站网站wordpress技术教程
  • 网站建设 的公司哪家好提供app开发公司报价
  • 做网站自动上传文章网络技术推广服务
  • 网站建设与开发定制怎么做局域网网站
  • 3网站建设电子商务网站建设详细策划书
  • 《AI智脉速递》2025 年 9月22 日 - 10月7日
  • win7做本地网站360如何做免费的网站
  • 石碣东莞网站建设wordpress 站群
  • 中交通力建设股份有限公司网站南京时事重大新闻
  • 网站网站建设考虑要素域名查询官网入口
  • 网站的内容更新网站的开发工具和运行环境
  • 免费app制作网站网页升级紧急通知在线
  • ArrayList 在序列化时的重写重写了 writeObject()特殊处理的原因
  • 南山做网站推广乐云seo买一个普通商标多少钱
  • 江西新农村建设权威网站在那可以做公司网站
  • 购物网站的设计头像制作免费生成器
  • 怎么做ppt教程网站网页设计登录注册页面代码
  • 【51单片机】【protues仿真】基于51单片机贪吃蛇游戏系统
  • 昆明学校网站设计公司网页设计项目模板代码
  • 有没有做培养基的网站已备案网站想关闭