相对于学习Pandas各种数据筛选操作,SQL语法显得更加简洁清晰,若能够将SQL语法与Pandas中对应的函数的使用方法关联起来,对于我们应用Pandas进行数据筛选来讲无疑是一个福音。
本文通过Pandas实现SQL语法中条件过滤、排序、关联、合并、更新、删除等简单及复杂操作,使得我们对方法的理解更加深刻,更加得心应手。
演示数据集
本文采用安德森鸢尾花卉(iris)数据集进行演示,iris数据集包含150个样本,对应数据集的每行数据。每行数据包含每个样本的四个特征和样本的类别信息,因此iris数据集是一个150行*5列的二维表。
我们可以 UCI Iris dataset 获取或者使用 from sklearn.datasets import load_iris 方式获取,为了演示方便我们只取其中10行数据,如下:
![a88af27e28fa907c5e00301632477f9a.png](https://i-blog.csdnimg.cn/blog_migrate/aeecfe1dc3d19f1f1d54780ab2d66e6d.jpeg)
接下来,就让我们一起学习一下,如何Pandas实现SQL语法中条件过滤、排序、关联、合并、更新、删除等数据查询操作。
字段查询 SELECT
SELECT sl, sw, pl, pw FROM iris LIMIT 2;
如上SQL实现返回每行记录的 sl,sw,pl,pw 字段,仅返回2行记录。我们使用Pandas实现如上SQL的功能,代码如下:
import pandas as pdiris = pd.read_excel(io="iris.xlsx", sheet_name='iris', usecols=["sl", "sw", "pl", "pw", "classes"])search = iris[["sl", "sw", "pl", "pw"]].head(2)print(search)# 执行上述代码,输出结果为: sl sw pl pw0 5.1 3.5 1.4 0.21 4.9 3.0 1.4 0.2
简单的条件过滤查询 WHERE
SELECT * FROM iris WHERE classes = 1 LIMIT 2;
如上SQL实现了查询满足classes=1的记录,并返回2行。我们使用Pandas实现该SQL,代码如下:
import pandas as pdiris = pd.read_excel(io="iris.xlsx", sheet_name='iris', usecols=["sl", "sw", "pl", "pw", "classes"])search = iris[iris["classes"]==1].head(2)print(search)# 执行上述代码,输出结果为: sl sw pl pw classes3 6.8 2.8 4.8 1.4 14 6.7 3.0 5.0 1.7 1
多条件的与或过滤查询 WHERE AND|OR
与关系 &
SELECT * FROM iris WHERE classes = 1 AND pl >= 5 LIMIT 2;
如上SQL实现查询同时满足classes=1 和 pl >=5 两个条件的记录,并返回2行。我们使用Pandas实现该SQL,代码如下:
import pandas as pdiris = pd.read_excel(io="iris.xlsx", sheet_name='iris', usecols=["sl", "sw", "pl", "pw", "classes"])search = iris[ (iris["classes"] == 1) & (iris["pl"] >= 5) ].head(2)print(search)# 执行上述代码,输出结果为: sl sw pl pw classes4 6.7 3.0 5.0 1.7 1
或关系 |
SELECT * FROM iris WHERE sl >= 5 OR pl >=5 LIMIT 2;
如上SQL实现查询满足 sl >=5 或者 pl >=5 任一条件的记录,返回2行。我们使用Pandas实现该SQL,代码如下:
import pandas as pdiris = pd.read_excel(io="iris.xlsx", sheet_name='iris',