厉害了,在Pandas中用SQL来查询数据,效率超高
今天我们继续来讲一下Pandas
和SQL
之间的联用,我们其实也可以在Pandas
当中使用SQL
语句来筛选数据,通过Pandasql
模块来实现该想法,首先我们来安装一下该模块
pip install pandasql
要是你目前正在使用jupyter notebook
,也可以这么来下载
!pip install pandasql
导入数据
我们首先导入数据
import pandas as pd
from pandasql import sqldf
df = pd.read_csv("Dummy_Sales_Data_v1.csv", sep=",")
df.head()
output
我们先对导入的数据集做一个初步的探索性分析,
df.info()
output
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9999 entries, 0 to 9998
Data columns (total 12 columns):# Column Non-Null Count Dtype
--- ------ -------------- ----- 0 OrderID 9999 non-null int64 1 Quantity 9999 non-null int64 2 UnitPrice(USD) 9999 non-null int64 3 Status 9999 non-null object 4 OrderDate 9999 non-null object 5 Product_Category 9963 non-null object 6 Sales_Manager 9999 non-null object 7 Shipping_Cost(USD) 9999 non-null int64 8 Delivery_Time(Days) 9948 non-null float649 Shipping_Address 9999 non-null object 10 Product_Code 9999 non-null object 11 OrderCode 9999 non-null int64
dtypes: float64(1), int64(5), object(6)
memory usage: 937.5+ KB
再开始进一步的数据筛选之前,我们再对数据集的列名做一个转换,代码如下
df.rename(columns={"Shipping_Cost(USD)":"ShippingCost_USD","UnitPrice(USD)":"UnitPrice_USD","Delivery_Time(Days)":"Delivery_Time_Days"},inplace=True)
df.info()
output
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9999 entries, 0 to 9998
Data columns (total 12 columns):# Column Non-Null Count Dtype
--- ------ -------------- ----- 0 OrderID 9999 non-null int64 1 Quantity 9999 non-null int64 2 UnitPrice_USD 9999 non-null int64 3 Status 9999 non-null object 4 OrderDate 9999 non-null object 5 Product_Category 9963 non-null object 6 Sales_Manager 9999 non-null object 7 ShippingCost_USD 9999 non-null int64 8 Delivery_Time_Days 9948 non-null float649 Shipping_Address 9999 non-null object 10 Product_Code 9999 non-null object 11 OrderCode 9999 non-null int64
dtypes: float64(1), int64(5), object(6)
memory usage: 937.5+ KB
用SQL
筛选出若干列来
我们先尝试筛选出OrderID
、Quantity
、Sales_Manager
、Status
等若干列数据,用SQL
语句应该是这么来写的
SELECT OrderID, Quantity, Sales_Manager, \
Status, Shipping_Address, ShippingCost_USD \
FROM df
与Pandas
模块联用的时候就这么来写
query = "SELECT OrderID, Quantity, Sales_Manager,\
Status, Shipping_Address, ShippingCost_USD \
FROM df"df_orders = sqldf(query)
df_orders.head()
output
SQL
中带WHERE
条件筛选
我们在SQL
语句当中添加指定的条件进而来筛选数据,代码如下
query = "SELECT * \FROM df_orders \WHERE Shipping_Address = 'Kenya'"df_kenya = sqldf(query)
df_kenya.head()
output
而要是条件不止一个,则用AND来连接各个条件,代码如下
query = "SELECT * \FROM df_orders \WHERE Shipping_Address = 'Kenya' \AND Quantity < 40 \AND Status IN ('Shipped', 'Delivered')"
df_kenya = sqldf(query)
df_kenya.head()
output
分组
同理我们可以调用SQL
当中的GROUP BY
来对筛选出来的数据进行分组,代码如下
query = "SELECT Shipping_Address, \COUNT(OrderID) AS Orders \FROM df_orders \GROUP BY Shipping_Address"df_group = sqldf(query)
df_group.head(10)
output
排序
而排序在SQL
当中则是用ORDER BY
,代码如下
query = "SELECT Shipping_Address, \COUNT(OrderID) AS Orders \FROM df_orders \GROUP BY Shipping_Address \ORDER BY Orders"df_group = sqldf(query)
df_group.head(10)
output
数据合并
我们先创建一个数据集,用于后面两个数据集之间的合并,代码如下
query = "SELECT OrderID,\Quantity, \Product_Code, \Product_Category, \UnitPrice_USD \FROM df"
df_products = sqldf(query)
df_products.head()
output
我们这里采用的两个数据集之间的交集,因此是INNER JOIN
,代码如下
query = "SELECT T1.OrderID, \T1.Shipping_Address, \T2.Product_Category \FROM df_orders T1\INNER JOIN df_products T2\ON T1.OrderID = T2.OrderID"df_combined = sqldf(query)
df_combined.head()
output
与LIMIT
之间的联用
在SQL
当中的LIMIT
是用于限制查询结果返回的数量的,我们想看查询结果的前10个,代码如下
query = "SELECT OrderID, Quantity, Sales_Manager, \
Status, Shipping_Address, \
ShippingCost_USD FROM df LIMIT 10"df_orders_limit = sqldf(query)
df_orders_limit
output
END
推荐阅读牛逼!Python常用数据类型的基本操作(长文系列第①篇)
牛逼!Python的判断、循环和各种表达式(长文系列第②篇)牛逼!Python函数和文件操作(长文系列第③篇)牛逼!Python错误、异常和模块(长文系列第④篇)
厉害了,在Pandas中用SQL来查询数据,效率超高相关推荐
- sap直接执行SQL语句查询数据
有时候需要临时在生产机查询部分数据,但通过SQVI实现不了,查询语句相对复杂,我们可以通过DBACOCKPIT这个事务码下的Performance–>Additional Functions–& ...
- SQL Server查询数据
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 开发工具与关键技术: SQL Serve ...
- SQL Server 查询数据表数据
查询数据表数据 1.查询数据表所有字段的数据信息: 2.查询部分列的所有数据: 3.查询部分列的所有数据,过滤重复行信息:
- B站黑马测试第一篇P182视频数据库SQL语句查询数据准备代码
drop table if exists goods; create table goods(id int unsigned primary key auto_increment,goodsName ...
- vb mysql 查询_vb中用sql语句查询数据库
给你个完整的吧.Dim rs1 As New ADODB.Recordset '定义数据集对象 Dim cnn As New ADODB.Connection '定义数据连接 Privat ...
- SQL合并查询数据,以逗号分隔
功能描述: 将查询到的数据合并为一条数据,以逗号分隔 案例: 功能描述: 现有三张表: Student(学生表) Course(课程表) Student-Course(学生课程关联表) 要求查询学生详 ...
- sql随机查询数据语句(NewID(),Rnd,Rand(),random())
SQL Server: 代码如下 复制代码 Select TOP N * From TABLE Order By NewID() NewID()函数将创建一个 uniqueidentifier 类型的 ...
- Excel 中使用SQL 语句查询数据(七)-----用LIKE 运算符进行模糊匹配查询
这篇博文要和大家分享的是用LIKE 运算符进行模糊匹配查询下图数据源商品代号包含数字的数据. 我们用Microsoft query连接数据源,步骤请参考本系列第一篇博文.语句如下图 其中 LIKE ' ...
- SQL 给查询数据新增一个列,并自定义分类排序
原数据: select attrval,vc0,vc,value,StartDate,EndDate,BB from test_1 查询到的数据如下图 现在要新增一列并根据attrval的值进行分类 ...
最新文章
- 通俗理解并行性和并发性的区别
- 头号任务:CIO面临的十大挑战预测
- 我来了 开源社区的兄弟门
- linux ps 只显示端口,这30个Linux系统监控工具,每个系统管理员都应该知道
- C指针原理(9)-C内嵌汇编
- java验证码的实现
- haroopad设置
- OpenCV_04 几何变换:图像缩放+图像平移+图像旋转+仿射变换+透射变换+图像金字塔
- CentOS下配置redis允许远程连接
- html添加兄弟元素,jquery插入兄弟节点的操作方法
- BZOJ4602: [Sdoi2016]齿轮(并查集 启发式合并)
- PHP进行AES/ECB/PKCS7 padding加密的例子(openssl)
- golang切片的交差集
- 联想小新Win11系统如何将新建标签页设置为Edge浏览器首页
- 卷积操作中的group
- 【增长工程学】如何研究数字广告投放策略?(Part1)
- excel隔行填充颜色的三种方法
- 爱普生Epson Artisan 800 一体机驱动
- 喇叭的灵敏度代表什么
- 旧 Mac、PC 别扔,变身 Chromebook 了解一下
热门文章
- PHP配置虚机权限不足的问题
- mysql oracle mvcc_PostgreSQL、Oracle/MySQL和SQL Server的MVCC实现原理方式
- string修饰的梦修改吗_Java String 对象,你真的了解了吗?
- stm32中spi可以随便接吗_stm32之SPI通信协议实例详解
- java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解
- 安卓application_阿里面试官刁钻连问:安卓 UID的分配、查看及相关知识
- 为什么整数在python中表示d_python 数据类型和变量
- java printwrite_Java PrintWriter write(int)用法及代码示例
- vue 修改favicon
- JSTL 与 JSP 代码段 相互调用变量