实用干货秘籍!最经典的10个Pandas数据查询案例,收藏!

内存优化——使用pandas读取千万级数据 超级干货:Python优化之使用pandas读取千万级数据 环境:Linux-cenos5 processor : 31 model : 62 model name : Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz cpu MHz : 2000.066 cache size : 20480 KB memory : 125G 在如上所述的单机环境中,使用一些优化可以使基于pandas数据格式的模型训练数据容量由600W增长为至少2000W,训练时间减少. 阅读详情

 
点击上方“菜鸟学Python”,选择“星标”公众号

超级无敌干货,第一时间送达!!!52e08f2dba520b8906a84db77394e033.jpeg

大家好,我是菜鸟哥。

Pandas的query函数为我们提供了一种编写查询过滤条件更简单的方法,特别是在的查询条件很多的时候,在本文中整理了10个示例,掌握着10个实例你就可以轻松的使用query函数来解决任何查询的问题。

bc97b8f709f31accc0288a7c9350f4e0.png

首先,将数据集导入Pandas

import pandas as pd
df = pd.read_csv("Dummy_Sales_Data_v1.csv")
df.head()

output

a15354c0056e2cd9914d1efb439c9f1d.png

它是一个简单的9999 x 12数据集,是使用Faker创建的,我在最后也会提供本文的所有源代码。

在开始之前,先快速回顾一下Pandas中的查询函数query。查询函数用于根据指定的表达式提取记录,并返回一个新的DataFrame。表达式是用字符串形式表示的条件或条件的组合。

PANDAS中的DATAFRAME(.loc和.iloc)属性用于根据行和列标签和索引提取数据集的子集。因此,它并不具备查询的灵活性。而括号符号[]可以灵活地基于条件过滤数据帧,但是如果条件很多的话编写代码是繁琐且容易出错的。

Pandas的query()函数可以灵活地根据一个或多个条件提取子集,这些条件被写成表达式并且不需要考虑括号的嵌套。

在后端Pandas使用eval()函数对该表达式进行解析和求值,并返回表达式被求值为TRUE的数据子集或记录。所以要过滤Pandas中的DataFrame,需要做的就是在查询函数中指定条件即可。

使用单一条件进行过滤

在单个条件下进行过滤时,在Query()函数中表达式仅包含一个条件。返回的输出将包含该表达式评估为真的所有行。

示例1

提取数量为95的所有行,因此逻辑形式中的条件可以写为

Quantity == 95

需要将条件写成字符串,即将其包装在双引号“”中。query函数的代码如下

df.query("Quantity == 95")

output

24ce8490696bfb1952aaf7ad8eeb2dc3.png

看起来很简单。它返回了数量为95的所有行。如果用一般查询的方式可以写成:

df [df [“Quantity”] == 95]

但是,如果想在同一列中再包含一个条件怎么办?

它在括号符号中又增加了一对方括号,如果是3个条件或者更多条件呢?那么他就变得难以管理。这就是query函数的优势了。

在多个条件过滤

一个或多个条件下过滤,query()的语法都保持不变

但是需要指定两个或多个条件进行过滤的方式

  • and:回在满足两个条件的所有记录

  • or:返回满足任意条件的所有记录

示例2

查询数量为95&单位价格为182 ,这里包含单价的列被称为UnitPrice(USD),因此,条件是

Quantity == 95
UnitPrice(USD) == 182

那么代码就是:

df.query("Quantity == 95 and UnitPrice(USD) == 182")

这个查询会报错:

69b485b5ef616ee9fd928436c79d8b06.png

但是为什么报错?

这是因为query()函数对列名有一些限制。列名称UnitPrice(USD)是无效的。我们要使用反引号把列名包含起来。

df.query("Quantity == 95 and `UnitPrice(USD)` == 182")

output

07c64743c7ad479412fec64e97522f4f.png

当两个条件满足时,只有3个记录。

或者我们直接将列名改成合理的格式:

df.rename(columns={'UnitPrice(USD)':'UnitPrice',
                  'Shipping_Cost(USD)':'Shipping_Cost',
                  'Delivery_Time(Days)':'Delivery_Time'},
        inplace=True)

这里就不需要使用反引号了:

df.query("Quantity == 95 and UnitPrice == 182")

示例3

我们现在只需要满足一个条件:

df.query("Quantity == 95 or UnitPrice == 182")

output

1afdc77548fe40f595af35b3a10a6221.png

它返回满足两个条件中的任意一个条件的所有列。

我们也可以使用|替代or关键字。

示例4

假设想获得数量不等于95的所有行。最简单的答案是在条件之前使用not关键字或否定操作符〜

df.query("not(Quantity == 95)")

output

8a1d2d27695fa75907d9217cdd12b31a.png

结果它包含数量不是95的所有行。

其实这里的条件不一定必须是相等运算符,可以从==,!=,>,<,≥,≤中选择,例如:

df.query("Quantity != 95")

文本过滤

对于文本列过滤时,条件是列名与字符串进行比较。

请query()表达式已经是字符串。那么如何在另一个字符串中写一个字符串?将文本值包装在单个引号“”中,就可以了。

示例5

想获得即状态“未发货”所有记录,可以在query()表达式中写成如下的形式:

df.query("Status == 'Not Shipped'")

output

98d26eae0975ace7dcd76fec84d23fc1.png

它返回所有记录,其中状态列包含值-“未发货”。

与数值的类似可以在同一列或不同列上使用多个条件,并且可以是数值和非数值列上条件的组合。

除此以外, Pandas中的query()方法还可以在查询表达式中使用数学计算。

查询中的简单数学计算

数学操作可以是列中的加,减,乘,除,甚至是列中值或者平方等,如下所示:

示例6

df.query("Shipping_Cost*2 < 50")

虽然这个二次方的操作没有任何的实际意义,但是我们的示例返回了所有达到要求的行。

7cbe3661cb4db26a8e4d889635dff654.png

我们还可以在一个或多个列上包含一些复杂的计算。

示例7

我们随便写一个比较复杂的公式:

df.query("Quantity**2 + Shipping_Cost**2 < 500")

output

1e44d4831e153732386440267a50966d.png

如果使用最原始的[]的形式,这个公式的查询基本上没法完成,但是使用query()函数则变为简单的多。

除了数学操作,还在查询表达式中使用内置函数。

查询中的内置函数

Python内置函数,例如sort(),abs(),factorial(),exp()等,也可以在查询表达式中使用。

示例8

查找单位价格平方根的超过15的行:

df.query("sqrt(UnitPrice) > 15")

output

6c95125d653482befcb9b484a8020167.png

query()函数还可以在同一查询表达式将函数和数学运算整合使用

示例9

df.query("sqrt(UnitPrice) < Shipping_Cost/2")

output

32c96c5db5d75c449cb7a2ea90499c61.png

到目前为止,所有查询示例都是关于数值和文本列的。但是,query()的还不仅限于这些数据类型,对于日期时间值query()函数也可以非常灵活的过滤。

日期时间列过滤

使用query()函数在日期时间值上进行查询的唯一要求是,包含这些值的列应为数据类型dateTime64 [ns]

在示例数据中,OrderDate列是日期时间,但是我们的df其解析为字符串,所以我们需要先进行转换:

df["OrderDate"] = pd.to_datetime(df["OrderDate"], format="%Y-%m-%d")

为了提取有关日期的有用信息并在query()需要使用dt提取器,dt是一种访问对象,用于提取日期时间,例如DateTime系列的属性。

示例10

获得八月份的所有记录

df.query("OrderDate.dt.month == 8")

output

ec4248da8a759cab608edc70ead3e19e.png

所有记录都是八月份的。OrderDate.dt.month显示了如何使用dt访问者仅提取整个日期值的月份值。

如果提取2021年8月订购日为15或以上的所有订单,可以写成这样

df.query("OrderDate.dt.month == 8 and OrderDate.dt.year == 2021 and OrderDate.dt.day >=15")

output

998821d1c2276531a15f9d82f7fa24ae.png

dt很好用并且可以在同一列上结合了多个条件,但表达式似乎太长了。所以可以通过编写更非常简单的表达式来过滤:

df.query("OrderDate >= '2021-08-15' and OrderDate <= '2021-08-31'")

我们直接传递一个符合日期格式的字符串,它会自动的转换并且比较:

将上面的所有内容整合:

df.query("OrderDate >= '2021-08-15' and OrderDate <= '2021-08-31' and Status =
= 'Delivered'")

output

6c437aa73de76a4fc2f8d54f392ad533.png

查询表达式包含了日期时间和文本列条件,它返回了符合查询表达式的所有记录

替换

上面的查询中都会生成一个新的df。这是因为:query()的第二个参数(inplace)默认false。

与一般的Pandas提供的函数一样,inplace的默认值都是false,查询不会修改原始数据集。如果我们想覆盖原始df时,需要将inplace=true。但是一定要小心使用inplace=true,因为它会覆盖原始的数据。

总结

我希望在阅读本文后,您可以更频繁,流利地使用Pandas中的query()函数,因为它可以方便以过滤数据集。这些查询的函数我每天都会或多或少的使用。

本文的所有示例代码在这里:

https://github.com/17rsuraj/data-curious/blob/master/TowardsDataScience/pandas_query_deep_dive.ipynb


 

 

 

 

 
推荐阅读:
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

年度爆款文案

点阅读原文,看B站我的视频!

AS5600磁编码器选型与安装避坑指南:磁铁形状、间隙距离到底怎么选?(附实测数据) 本文详细解析了AS5600磁编码器的选型与安装要点,包括磁铁形状、间隙距离等关键参数的选择,并附有实测数据支持。特别针对Arduino和I2C接口的应用场景,提供了硬件选型和机械安装的实用指南,帮助开发者避免常见陷阱,提升系统精度和稳定性。 阅读详情

相关推荐

如何在 VMware Workstation 虚拟机中利用 Nvidia 显卡的硬件加速功能

本文详细介绍了在VMware Workstation虚拟机中配置Nvidia显卡硬件加速的完整流程。重点包括:检查硬件兼容性、安装显卡驱动、编辑VMware配置文件启用PCI直通功能(需修改config.ini文件参数)、为虚拟机分配PCI设备等关键步骤。文章特别强调了配置注意事项,如系统资源需求、BIOS设置要求、驱动兼容性等问题,并建议操作前备份数据。通过此方法可实现虚拟机对Nvidia显卡的直接调用,适用于需要GPU加速的计算场景。

qq_39777550的博客 6702

20 个 Pandas 数据实战案例,干货多多

作者 |俊欣来源 | 关于数据分析与可视化今天我们讲一下pandas当中的数据过滤内容,小编之前也写过也一篇相类似的文章,但是是基于文本数据的过滤,大家有兴趣也可以去查阅一下。下面小编会...

AI科技大本营 4920

告别路径打架!用Python实现CBS算法搞定仓库机器人调度(附完整代码)

本文详细介绍了如何使用Python实现CBS(Conflict-Based Search)算法解决仓库机器人调度中的路径冲突问题。通过多智能体路径规划(MAPF)技术,有效避免AGV在智能仓库中的碰撞和死锁,提供完整代码实现和工业场景优化技巧,帮助开发者快速构建高效的机器人调度系统。

weixin_30275415的博客 329

整理了10个经典的Pandas数据查询案例

点击上方“菜学Python”,选择“星标”公众号超级无敌干货,第一时间送达!!!大家好,我是菜鸟哥。Pandas的query函数为我们提供了一种编写查询过滤条件更简单的方法,特别是在的查询条件很多的时候,在本文中整理了10个示例,掌握着10个实例你就可以轻松的使用query函数来解决任何查询的问题。首先,将数据集导入Pandasimportpandasaspd df=pd.read_cs...

cainiao_python的博客 621

AD17入门简单教程(一)

AD17入门简单教程 我写这篇文章主要是因为最近刚学习完了AD17,想做一下总结,也希望通过自己心得的帮助一些刚入门AD17的小白。 总结一共分为两大部分,包括AD17的下载安装与汉化(文末有详细链接)、工程的创建、元器件库、PCB、走线中的常用命令介绍,文末还附有完整的PCB工程以及讲解视频。 第一部分工程的创建及元器件库常用命令 1.首先在桌面上创建一个文件夹,然后在AD17点击左上角的文件中...

qq_45433195的博客 2万+

StarRocks FE启动异常

服务器断电,StarRocks FE 启动失败。

qq_15138049的博客 1113

肝了3天,整理了90个Pandas案例,强烈建议收藏!

文章很长,高低要忍一下,如果忍不了,那就收藏吧,总会用到的如何使用列表和字典创建 Series使用列表创建 Series使用 name 参数创建 Series使用简写的列表创建 Serie...

cainiao_python的博客 874

淘宝抓包,直达函数内部request请求体和response响应体, 告别FD, Charles,SSL,justtrustme 等http代理,证书工具。

淘宝抓包,hook发包函数,直接获取response相应数据

binary66的博客 4470

十个Pandas高效数据处理与分析应用实例(收藏版)

Pandas是Python编程语言中的一个开源数据分析和数据处理库。它提供了数据结构和数据操作工具,专为处理数表或异构数据设计。Pandas的核心数据结构是DataFrame和Series,这使得数据处理变得非常直观和高效。

全糖冲击的博客 4031

代谢组数据分析(一):生成代谢组数据SummarizedExperiment对象

本文介绍了基于Zeybel 2022年发布的多组学数据集的分析脚本,该数据集包含微生物组、宿主人体学指标、临床学指标、血浆代谢组和免疫因子等多维度数据,涵盖56位患者的横截面数据和22位患者的纵向时间序列数据。脚本旨在生成适用于下游分析的数据对象,主要包括phyloseq和SummarizedExperiment两类。phyloseq对象用于整合微生物群落数据,支持多数据整合、可视化、丰富分析功能和便捷的数据处理;SummarizedExperiment对象则广泛应用于基因组学和转录组学研究,便于数据整合、

专注生信领域 2989

基于STM32L4XX 、HAL库的DRV8825PWPR步进电机驱动器驱动程序应用设计

一、简介:DRV8825是德州仪器(TI)推出的一款高性能步进电机驱动器模块。它集成了微步进分度器、MOSFET H桥以及过流、欠压锁定和过热保护电路。主要特性:驱动能力: 最高电压45V,每相最大电流2.5A(需配合足够散热)。微步进: 支持全步、1/2、1/4、1/8、1/16、1/32微步模式,通过M0, M1, M2三个引脚控制。控制接口: 非常简单,只需要两个核心信号:(脉冲输入):每个上升沿脉冲驱动电机移动一个微步。(方向控制):高电平/低电平决定电机旋转方向。使能端: (睡眠模式,低电平有效)

PP_Cottage的博客 330

pandas的自带数据集_python数据分析万字干货!一个数据集全方位解读pandas

作者 | 刘早起早起来源 | 早起python说到python与数据分析,那肯定少不了pandas的身影,本文希望通过分析经典的NBA数据集来系统的全方位讲解pandas包,建议搭配IDE一遍敲一边读哦。话不多说,开始吧!目录安装与数据介绍安装与配置检查数据探索性分析pandas数据结构series对象dataframe对象访问series元素使用索引使用.loc与.iloc访问data...

weixin_39980575的博客 518

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【数据分析---Pandas实战指南:精通数据查询、增删改操作与高效索引和列名操作管理】

【数据分析---Pandas实战指南:精通数据查询、增删改操作与高效索引和列名操作管理】s对象或df对象如何执行自定函数?-> 借助apply方s/df.apply(func=,axis=,args=)func: 自定义函数名axis: df中按行(1)或按列(0,默认的)执行args: 自定义函数带其他有参数时, 需要通args传参s对象的apply方法s对象的apply方法自定义函数中的第一个参数值是s对象的每一个值自定义函数返回值为一个值apply_dfif x=='天通苑租房':

书生的技术分享 1433

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【干货原创】厉害了,在Pandas中用SQL来查询数据,效率超高

今天我们继续来讲一下Pandas和SQL之间的联用,我们其实也可以在Pandas当中使用SQL语句来筛选数据,通过Pandasql模块来实现该想法,首先我们来安装一下该模块pipinst...

weixin_43373042的博客 2028

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Pandas进阶,从0到100你还差这篇文章,1.8w字干货!

↑↑↑关注后"星标"简说Python人人都可以简单入门Python、爬虫、数据分析简说Python严选来源:51CTO博客 作者:youerningOneol...

简说Python的博客 338

数据分析之Pandas VS SQL!

作者 | 爱德宝器本文转自公众号『数据管道』,详情请扫码关注该公众号:Pandas是一个开源的Python数据分析库,结合 NumPy 和 Matplotlib 类库,可...

罗罗攀 252

pythondistinct教程_超实用干货|Python SQL无敌组合,菜鸟必读!

插入数据既然表已经创建成功,我们就可以开始插入数据了,先从tushare.pro上面获取沪深300指数日线行情数据,用INSERT INTO这个SQL语句插入。importpsycopg2importpandasaspdimporttushareastscon=psycopg2.connect(database='postgres',user='postgres',passw...

weixin_34621186的博客 842

python数据分析万字干货!一个数据集全方位解读pandas

说到python与数据分析,那肯定少不了pandas的身影,本文希望通过分析经典的NBA数据集来系统的全方位讲解pandas包,建议搭配IDE一遍敲一边读哦。话不多说,开始吧!目录安装与...

qq_21787049的博客 404

Python数据分析之pandas库的使用详解

本篇文章目录一、前言二、什么是pandas三、pandas安装四、pandas的常用数据类型4.1 series:表示一维,带标签数组,一行或一列4.1.1创建series4.1.2 打印索引值4.1.3 打印数据值4.1.3 创建一个具有标签索引的series4.1.4 使用python字典创建series4.1.5 根据索引值查询数据4.2 DataFrame:表示二维,多行多列五、数据的读取......

qq_46292926的博客 2447

干货!Python与MySQL数据库的交互实战

作者|Huang supreme,责编 | 郭芮头图 | 优快云 下载自视觉中国安装PyMySQL库如果你想要使用python操作MySQL数据库...

优快云资讯 4217

2023新出的Python学习神器,赶紧收藏!

今天给大家隆重推荐一位好友:俊欣,公众号【关于数据分析与可视化】的号主,一名爱好编程、有着丰富阅历的数据挖掘工程师。他的公众号已经累积了170+篇的原创,有关于数据分析与可视化方向的、有Python入门实战方向的、也有机器学习、深度学习方向的内容下面就来分享一下他所整理的资料火爆全网的Pandas教程Pandas官方教程学习Python数据分析,离不开Pandas!这里整理了Pandas学习的经典...

fengdu78的博客 223

Pandas基础+进阶10000字笔记!

↑关注 + 置顶 ~ 别错过小z的干货内容数据对象pandas主要有两种数据对象:Series、DataFrame注:后面代码使用pandas版本0.20.1,通过import p...

SeizeeveryDay的博客 547

ts里sql语句参数说明_超实用干货|Python+SQL无敌组合,菜鸟必读!

SQL是结构化查询语言Structured Query Language的简称,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。在正式讲解代码之前,先来科普一下数据库相关的知识。数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。数据库系统具有如下特点:① 数据结构化实现整体数据的结构化,这里所说的“整体”结...

weixin_35778603的博客 779

04. Pandas查询数据

Pandas查询数据 今天没有漂亮的PPT,只有干货!! Pandas查询数据的几种方法 df.loc方法,根据行、列的标签值查询 df.iloc方法,根据行、列的数字位置查询 df.where方法 df.query方法 .loc既能查询,又能覆盖写入,强烈推荐! Pandas使用df.loc查询数据的方法 使用单个label值查询数据 使用值列表批量查询 使用数值区间进行范围查询 使用条件表达式查询 调用函数查询 注意 以上查询方法,既适用于行,也适用于列 注意观察降维dataFrame>

lvlinjier的博客 1103
上一篇: 60个必备!用Python的一些日常高频写法,建议收藏备用!
下一篇: 不要再盯着大厂了,这16家中小厂我建议你也试试
菜鸟学Python
博客等级 码龄9年 8062粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值