iris数据_数据筛选,如何像SQL一样使用Pandas完成JOIN连接、UNION合并查询

50cd31db8910235599c94eee63347907.png

相对于学习Pandas各种数据筛选操作,SQL语法显得更加简洁清晰,若能够将SQL语法与Pandas中对应的函数的使用方法关联起来,对于我们应用Pandas进行数据筛选来讲无疑是一个福音。


演示数据集

本文采用安德森鸢尾花卉(iris)数据集进行演示,iris数据集包含150个样本,对应数据集的每行数据。每行数据包含每个样本的四个特征和样本的类别信息,因此iris数据集是一个150行*5列的二维表。

我们可以在 UCI Iris dataset 中获取,或者使用 from sklearn.datasets import load_iris 方式获取,为了演示方便我们只取其中10行数据,并拆分成iris_a,iris_b两部分 如下:

49dfe513b257fd0392202edf2b368f73.png

UNION 合并查询

合并结果 UNION ALL 可能存在重复记录

合并如下两个 SELECT 语句的结果集,需注意,UNION ALL 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

e980a3caa05fbbf66dbfcf0ef7630686.png

如上SQL实现将两个查询结果进行合并,允许存在重复记录。我们使用 pandas.concat 方法实现该SQL,代码如下:

4ced06048ee00eb67bcfc6abf077409a.png

合并结果 UNION 不存在重复记录

合并如下两个 SELECT 语句的结果集,同时也需注意,UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

1fafaac3d1cb69645905024a6c82d609.png

如上SQL实现将两个select查询结果进行合并,不允许存在重复记录。我们使用 pandas.concat.drop_duplicates 方法 实现该SQL,代码如下:

d7463b7a64310c97d5dbe75a4b82b8b5.png

JOIN 连接查询

同样,我们依旧使用如上演示数据,如下:

49dfe513b257fd0392202edf2b368f73.png

内连接 INNER JOIN

获取iris_a,iris_b两个表中classes字段相同的记录,并返回满足条件的两张表中的所有记录。

09b6f4f4936310ad5388132403eb60ee.png

如上SQL实现iris_airis_b 按照classes字段进行内连接。我们使用 pandas.merge(iris_a, iris_b, on='classes') 实现该SQL,代码如下:

e3351dd74e39da73029d62a62e7a930c.png

左连接 LEFT OUTER JOIN

获取左表 iris_a 所有记录,判断每条数据的 classes 字段是否能匹配到右表iris_b的数据,无论能否匹配到,左表 iris_a 数据都会保留。若能匹配,则左右表都保留。若不能匹配,右表iris_b字段都置空NULL,并返回保留的记录。

03e963186679294bc47276ff72f504f5.png

如上SQL实现iris_a 与 iris_b 按照classes字段进行左连接。我们使用 pandas.merge(iris_a, iris_b, on='classes', how='left') 方法实现该SQL,代码如下:

7d76827bb9559e64c24ffd58fe39d339.png

右连接 RIGHT OUTER JOIN

获取右表 iris_b 所有记录,判断每条数据的 classes 字段是否能匹配到右表 iris_a 的数据,无论能否匹配到,右表 iris_b 数据都会保留。若能匹配,则左右表都保留。若不能匹配,左表iris_a字段都置空NULL,并返回保留的记录。

62f1719973594e3c3a9d5ab65b48e374.png

如上SQL实现iris_a 与 iris_b 按照classes字段进行右连接。我们使用 pandas.merge(iris_a, iris_b, on='classes', how='right')实现该SQL,代码如下:

27d1e7a276fac48a67f61941b816f972.png

更多内容:通俗易懂!像使用SQL一样使用Pandas进行数据筛选等复杂操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值