5个例子介绍Pandas的merge并对比SQL中join

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 5个例子介绍Pandas的merge并对比SQL中join

本文的重点是在合并和连接操作方面比较Pandas和SQL。Pandas是一个用于Python的数据分析和操作库。SQL是一种用于管理关系数据库中的数据的编程语言。两者都使用带标签的行和列的表格数据。

Pandas的merge函数根据公共列中的值组合dataframe。SQL中的join可以执行相同的操作。这些操作非常有用,特别是当我们在表的不同数据中具有共同的数据列(即数据点)时。

640.png

pandas的merge图解

我创建了两个简单的dataframe和表,通过示例来说明合并和连接。

640.png

“cust”包含5个客户的3条信息。列是id、年龄和类别。

640.png

“purc”包含客户id、机票号码和购买金额。

id是共同列的列,所以我们将在合并或联接时使用它。

您可能已经注意到,id列并不完全相同。有些值只存在于一个dataframe中。我们将在示例中看到处理它们的方法。

示例1

第一个示例是基于id列中的共享值进行合并或连接。使用默认设置完成了这个任务,所以我们不需要调整任何参数。

importpandasaspdcust.merge(purc, on='id')

640.png

Pandas的merge函数不会返回重复的列。另一方面,如果我们选择两个表中的所有列(“*”),则在SQL join中id列是重复的。

mysql>selectcust.*, purc.*->fromcustjoinpurc->oncust.id=purc.id;+------+------+------+------+--------+--------+|id|age|ctg|id|ticket|amount|+------+------+------+------+--------+--------+|3|22|B|3|1001|24.10||4|29|C|4|1002|32.50||5|17|B|5|1003|34.80|+------+------+------+------+--------+--------+

示例2

假设我们希望左表中有所有的行,而右表中只有匹配的行。在Pandas中,on参数被更改为“left”。在SQL中,我们使用“left join”而不是“join”关键字。

cust.merge(purc, on='id', how='left')

640.png

mysql>selectcust.*, purc.*->fromcust->leftjoinpurc->oncust.id=purc.id;+------+------+------+------+--------+--------+|id|age|ctg|id|ticket|amount|+------+------+------+------+--------+--------+|3|22|B|3|1001|24.10||4|29|C|4|1002|32.50||5|17|B|5|1003|34.80||1|34|A|NULL|NULL|NULL||2|28|A|NULL|NULL|NULL|

purcdataframe和表中没有id为1或2的行。因此,purc中的列中填充了这些行的空值。

示例3

如果我们想要看到两个dataframe或表中的所有行,该怎么办?

在Pandas中,这是一个简单的操作,可以通过将' outer '参数传递给on形参来完成。

cust.merge(purc, on='id', how='outer')

640.png

MySQL没有提供“完整的外连接”,但是我们可以通过两个左连接来实现。

注意:尽管关系数据库管理系统(rdbms)采用的SQL语法基本相同,但可能会有一些细微的差异。因此,最好检查特定RDBMS的文档,看看它是否支持完整的外部连接。

在MySQL中,完整的外连接可以通过两个左连接实现:

mysql>selectcust.*, purc.*->fromcustleftjoinpurc->oncust.id=purc.id->union->selectcust.*, purc.*->frompurcleftjoincust->oncust.id=purc.id;+------+------+------+------+--------+--------+|id|age|ctg|id|ticket|amount|+------+------+------+------+--------+--------+|3|22|B|3|1001|24.10||4|29|C|4|1002|32.50||5|17|B|5|1003|34.80||1|34|A|NULL|NULL|NULL||2|28|A|NULL|NULL|NULL||NULL|NULL|NULL|6|1004|19.50||NULL|NULL|NULL|7|1005|26.20|+------+------+------+------+--------+--------+

union操作符将多个查询的结果堆叠起来。这类似于Pandas的concat功能。

示例4

合并或联接不仅仅是合并数据。我们可以把它们作为数据分析的工具。例如,我们可以计算每个类别(“ctg”)的总订单金额。

cust.merge(purc, on='id', how='left')[['ctg','amount']].groupby('ctg').mean()
ctgamount--------------ANaNB29.45C32.50

因为purc表不包含任何属于类别A中的客户的购买,所以sum结果为Null。

mysql>selectcust.ctg, sum(purc.amount)
->fromcust->leftjoinpurc->oncust.id=purc.id->groupbycust.ctg;+------+------------------+|ctg|sum(purc.amount) |+------+------------------+|A|NULL||B|58.90||C|32.50|+------+------------------+

示例5

我们还可以在组合之前根据条件筛选行。让我们假设我们需要找到小于25岁的客户的购买量。

对于pandas 我们首先过滤dataframe,然后应用合并函数。

cust[cust.age<25].merge(purc, on='id', how='left')[['age','amount']]      
ageamount02224.111734.8mysql使用一个where子句来指定过滤条件。mysql>selectcust.age, purc.amount->fromcust->joinpurc->oncust.id=purc.id->wherecust.age<25;+------+--------+|age|amount|+------+--------+|22|24.10||17|34.80|+------+--------+

总结

我们已经介绍了一些示例来演示Pandas合并函数和SQL连接之间的区别和相似之处。

这些例子可以看作是简单的案例,但是它们可以帮助您建立直觉并理解基础知识。在理解了基础知识之后,您可以构建更高级的操作。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
SQL
简单练习Microsoft SQL Server MERGE同步两个表
【10月更文挑战第13天】本文介绍了在Microsoft SQL Server中使用`MERGE`语句同步两个表的步骤。首先创建源表`SourceTable`和目标表`TargetTable`并分别插入数据,然后通过`MERGE`语句根据ID匹配行,实现更新、插入和删除操作,最后验证同步结果。此方法可根据需求调整以适应不同场景。
137 1
|
3天前
|
SQL 数据采集 数据挖掘
Pandas数据合并:concat与merge
Pandas是Python中强大的数据分析库,提供灵活高效的数据结构和工具。本文详细介绍了Pandas中的两种主要合并方法——`concat`和`merge`。`concat`用于沿特定轴连接多个Pandas对象,适用于简单拼接场景;`merge`则类似于SQL的JOIN操作,根据键合并DataFrame,支持多种复杂关联。文章还探讨了常见问题及解决方案,如索引对齐、列名冲突和数据类型不一致等,帮助读者全面掌握这两种方法,提高数据分析效率。
20 8
|
1月前
|
SQL
SQL JOIN
【11月更文挑战第06天】
47 4
|
6月前
|
SQL 关系型数据库 MySQL
SQL FULL OUTER JOIN 关键字
SQL FULL OUTER JOIN 关键字
55 2
|
2月前
|
SQL 关系型数据库 MySQL
图解 SQL 里的各种 JOIN
用文氏图表示 SQL 里的各种 JOIN,一下子就理解了。
49 2
|
2月前
|
SQL 分布式计算 Java
Hadoop-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作
Hadoop-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作
51 3
|
3月前
|
SQL 数据采集 索引
聚焦Pandas数据合并:掌握merge方法
聚焦Pandas数据合并:掌握merge方法
50 0
|
4月前
|
Java 网络架构 数据格式
Struts 2 携手 RESTful:颠覆传统,重塑Web服务新纪元的史诗级组合!
【8月更文挑战第31天】《Struts 2 与 RESTful 设计:构建现代 Web 服务》介绍如何结合 Struts 2 框架与 RESTful 设计理念,构建高效、可扩展的 Web 服务。Struts 2 的 REST 插件提供简洁的 API 和约定,使开发者能快速创建符合 REST 规范的服务接口。通过在 `struts.xml` 中配置 `&lt;rest&gt;` 命名空间并使用注解如 `@Action`、`@GET` 等,可轻松定义服务路径及 HTTP 方法。
69 0
|
4月前
|
SQL 数据处理 数据库
深入解析SQL中的MERGE语句及其重要性
【8月更文挑战第31天】
116 0
|
4月前
|
SQL 存储 数据挖掘
"SQL JOIN大揭秘:解锁多表联合查询的终极奥义,从内到外,左至右,全连接让你数据世界畅通无阻!"
【8月更文挑战第31天】在数据库领域,数据常分散在多个表中,而SQL JOIN操作如同桥梁,连接这些孤岛,使数据自由流动,编织成复杂的信息网络。本文通过对比内连接、左连接、右连接和全连接的不同类型,并结合示例代码,展示SQL JOIN的强大功能。掌握JOIN技术不仅能高效查询数据,更是数据分析和数据库管理的关键技能。
131 0