datagrid如何获取一行数据中的某个字段值_使用Python Pandas像SQL一样实现复杂的数据筛选查询...

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

本文通过Pandas实现SQL语法中条件过滤、排序、关联、合并、更新、删除等简单及复杂操作,使得我们对方法的理解更加深刻,更加得心应手。


演示数据集

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

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

25e6c8e133bb59a7089764b7f4671590.png

接下来,就让我们一起学习一下,如何Pandas实现SQL语法中条件过滤、排序、关联、合并、更新、删除等数据查询操作。

字段查询 SELECT

1e2e2b26ae713338e919df4eccae2a5a.png

如上SQL实现返回每行记录的 sl,sw,pl,pw 字段,仅返回2行记录。我们使用Pandas实现如上SQL的功能,代码如下:

626e87bb2c1be6039dc0d3f416ab4973.png

简单的条件过滤查询 WHERE

c2fa286a32b30c7aca22d3f4f078bcc7.png

如上SQL实现了查询满足classes=1的记录,并返回2行。我们使用Pandas实现该SQL,代码如下:

51d9db7db6bdf1cbac59c6e1c4d44e9e.png

多条件的与或过滤查询 WHERE AND|OR

与关系 &

f8454f8a7d3ed086d90a89d94c6be90c.png

如上SQL实现查询同时满足classes=1 和 pl >=5 两个条件的记录,并返回2行。我们使用Pandas实现该SQL,代码如下:

136076458a5abfad67f23927c3ae2a2f.png

或关系 |

3b59128c9b08ea028787fc195978bde2.png

如上SQL实现查询满足 sl >=5 或者 pl >=5 任一条件的记录,返回2行。我们使用Pandas实现该SQL,代码如下:

5d4dd209347e6361fc8bb7fc1705c985.png

条件过滤 空值判断

空判断 is null

9babc43accd297a91207f36f19ad06f1.png

如上SQL实现查询 sl 字段为NULL的记录,我们使用Pandas实现该SQL,代码如下:

90ec8d5476bffd4f43ac416aa1f4b9b5.png

非空判断 is not null

730b0016631d1023d01969d790a37d16.png

如上SQL实现查询sl字段不为 NULL 的记录。我们使用Pandas实现该SQL,代码如下:

916cc69df9eeaf91b4e46efb4b809da3.png

排序 ORDER BY ASC|DESC

8b339f6e6eb879a76bd761468e16d46e.png

如上SQL实现将满足sl字段值大于等于5的记录,按照classes降序排序。我们使用Pandas实现该SQL,代码如下:

c046acb86d6bb9c06653fc6d23e10df0.png

更新 UPDATE

3f562d9e7c2ef0fda953396e3b1980bd.png

如上SQL实现将同时满足pw = 1.7 和 pl >= 5的记录中的classes字段值更新为2。我们使用Pandas实现该SQL,代码如下:

2c2f848a45780d3a7254236a09a9586d.png

分组统计 GROUP BY

22dbed6ce300518045537a2822e51d6e.png

如上SQL实现 根据classes进行分组,返回classes 及每组数量。我们使用Pandas实现该SQL,代码如下:

631d70695add9443f1a3f32761b4c39e.png

分组统计 聚合输出

cbeb34debc6f0ad126781fffd893b486.png

如何SQL实现根据classes进行分组,返回classes值,每个分组的pl平均值以及每个分组的sl最大值。我们使用Pandas实现该SQL,代码如下:

dfe0aa5b678fa98eaa03a530969d388e.png

删除

08005d8d924e2e9133975ab7efc84205.png

如上SQL实现将同时满足pw = 1.7 和 pl >= 5的记录删除。我们使用Pandas实现该SQL,代码如下:

a0f11f275a050845f73d8ae8d7229300.png

合并查询

接下来介绍如何使用Pandas进行合并查询及多表关联查询,为了演示方便,我们上面示例中的iris数据集,拆分成iris_a,iris_b两部分,如下:

dc2afe3d4ef5d66537f90631e80e0f5a.png

合并结果 UNION ALL 允许重复

bdf00c109f3d76e5b83acadf0920053e.png

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

c29446cbd11cde40993a227ffe6f3872.png

合并结果 UNION 不允许重复

61aae33f1e3fb17b4bf15875b5ef6795.png

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

ab1302364cd3e92b0ef6d29ae9be023f.png

关联查询

内关联 INNER JOIN

18527dcf9d6f8489c770d494ef4ab49a.png

如上SQL实现iris_a 与 iris_b 按照classes字段进行内关联。我们使用Pandas实现该SQL,代码如下:

d8f42cc49bc195d9ea78144075e5f7e4.png

左关联 LEFT OUTER JOIN

3779dca6f5985d29fa873d70f701af6a.png

如上SQL实现iris_a 与 iris_b 按照classes字段进行左关联。我们使用Pandas实现该SQL,代码如下:

2570b37baf0abce23a2a225227984a40.png

右关联 RIGHT OUTER JOIN

6208f7830f99a8ffdde85b3a1f7ca25a.png

如上SQL实现iris_a 与 iris_b 按照classes字段进行右关联。我们使用Pandas实现该SQL,代码如下:

bae299b13e44b708b25a0eebc15adac9.png

f5200db1c3481f0e041e9d2720aa4983.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值