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

Python处理Excel数据-pandas篇 Python处理Excel数据-pandas篇 非常适用于大量数据的拼接、清洗、筛选及分析 在计算机编程中,pandas是Python编程语言的用于数据操纵和分析的软件库。特别是,它提供操纵数值表格和时间序列的数据结构和运算操作。它的名字衍生自术语“面板数据”(panel data),这是计量经济学的数据集术语,它们包括了对同一个体的在多个时期上的观测。它的名字是短语“Python data analysis”自身的文字游戏。 目录Python处理Excel数据-pandas篇一、安装环境1、打开以下文 阅读详情

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

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

大家好,我是菜鸟哥。

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

93ca36ee03c08c5daad4cd3af732eb54.png

首先,将数据集导入Pandas

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

output

918e4aef6d26fc3926cc6a3023ef6850.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

9a6d1f6948a5cab0e195c61bbb5b8281.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")

这个查询会报错:

5bd86c723e680eae4306dc3759114a13.png

但是为什么报错?

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

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

output

d542050b24f56130ddef109306ea03f1.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

9b6f49730905b8be93733bed530f78f8.png

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

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

示例4

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

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

output

97475bc3a95ad5e66f1125f063b37792.png

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

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

df.query("Quantity != 95")

文本过滤

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

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

示例5

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

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

output

2faea010a9b024f0e82824140554ab63.png

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

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

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

查询中的简单数学计算

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

示例6

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

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

42541e35e0032124510fcd810d81f258.png

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

示例7

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

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

output

e068bcd9a7bf549d589fff45d4f64b9d.png

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

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

查询中的内置函数

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

示例8

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

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

output

431ed3154fb9027076c5bb14934e193f.png

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

示例9

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

output

bd7da6ea86b4a11d74abe92369edc2d8.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

8b3c8719f4377767c641521f70311105.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

94e681560d9c69cd03aaf7e7fe8258a9.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

147db96f3cb3a0d293502725628e58e8.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站我的视频!

Pandas处理数据的相关学习资料 自学过程记录 阅读详情

相关推荐

IPMItool 控制风扇转速

然后手动设置风扇,最后一位0x1e为设置30%的转速(16进制)。最后4位 0x0f 表示15%,0x0a,表示10%,不建议小于10%,因为10%已经很静音了 如果再小怕不能控温,烧毁硬件。首先停止服务器的自动风扇控制,最后一位0x00表示停止自动风扇控制,0x01为开启自动风扇控制。首先开启主板上的ipmi 设置好 用户名密码。此过程可以在网上搜索,有很多的资料可以参考。解压只有在目录里面有ipmltool。下面是一些常用的修改温度命令。

m0_37970303的博客 5061

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

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

AI科技大本营 4920

blenderproc 制作位姿估计数据集

blenderproc 制作位姿估计数据集 准备工作 1.首先需要去下载blenderproc的源码blenderproc,按照作者的readme文件进行编译。 2.其次需要下载bop_toolkit源码,链接如下bop_toolkit 3.说明:blenderproc主要用来生成数据,包括depth,rgb,位姿标签文件(scene_gt.json),bop_toolkit主要用来生成mask和mask_visib,scene_gt_info.json,用于判断物体的可见区域比例,如果遮挡太多考虑去掉。做

qq_43814359的博客 5698

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

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

cainiao_python的博客 874

(头歌作业)—6.1 葡萄酒评论分析报告(project)

请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。请读取文件中的数据,完成以下任务:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。

2301_80677920的博客 1245

20个闭环渗透测试项目:从漏洞发现到简历突围

渗透测试不仅是工具使用,更是对系统设计缺陷与实现偏差的深度推演。理解OWASP Top 10、Burp Suite等基础能力只是起点,真正具备工程价值的是能复现、可验证、可协作的完整攻击链。本文聚焦真实业务场景下的SSRF协议绕过、JWT签名机制缺陷、Redis未授权利用、Kong网关配置风险及etcd存储结构分析等核心热词,揭示漏洞本质在于架构决策与配置偏差的叠加态。适用于红队实战、甲方安全建设与乙方渗透审计等多类岗位,帮助从业者将技术动作升维为技术叙事。

weixin_32234493的博客 414

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

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

全糖冲击的博客 4031

物理信息神经网络(PINNs)在交通运输领域的应用

物理信息神经网络(PINNs)在交通运输领域的应用研究结合了数据驱动与物理模型约束,通过嵌入交通流守恒定律等物理信息,显著提升了交通状态估计与预测的精度。该技术仅需少量观测数据(流量、速度、密度等),即可实现高精度建模,尤其适用于数据稀疏场景。研究重点包括:交通状态估计与预测、参数辨识、交通控制优化等领域,同时面临计算成本高、物理模型依赖性等挑战。未来需解决大规模异构数据处理问题,以进一步推动智能交通系统发展。

qq_49609070的博客 944

Pandas技巧大全:含具体代码实现

这学期刻意少选了一些课,希望能够多一些输入,让自己的内在能力提升起来,做一个实干家而不是口嗨家。于是干脆结合平时数据处理过程中遇到的问题,进行系统的总结,形成一篇篇文档,既是对自己的记录,也可能对看到的朋友有帮助。 由于水平有限目前需要依靠大量的参考资料来支撑,也尽数列在【参考文献】中,希望对看到的朋友有所帮助。 非常感谢松鼠在过程中给出的建议和支持,没有松鼠的鼓励可能我完全坚持不到不断完善和更新,有人支持的感觉真好~

Wan7777777的博客 2726

蠕虫病毒代码(纯属参考,请勿用于非法事件)

1.介绍蠕虫病毒 蠕虫病毒是一种常见的计算机病毒,是无须计算机使用者干预即可运行的独立程序,它通过不停的获得网络中存在漏洞的计算机上的部分或全部控制权来进行传播。 计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者破坏数据和恶意篡改系统. 影响计算机使用并且能够自我复制的一组计算机指令或者程序代码 中文名:蠕虫病毒 传染方式:网络和电子邮件 外文名:Worm virus 类型:计算机病毒 2.代码(建议使用虚拟机,否则你的计算机将会就地报废,使用时要关闭电脑病毒保护,否则程序会...

Kenny20211105的博客 2万+

下水管道损坏检测数据集总结

下水管道损坏检测数据集包含 6708 张图像,为下水管道损坏情况的检测提供了丰富的数据基础。该数据集提供了 YOLO 和 VOC 两种常见的标注方式,方便不同需求的使用者进行模型训练和研究。

crz1336768325的博客 870

整理了10个经典的Pandas数据查询案例(附原始数据\多个条件过滤\日期条件过滤)

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

Triumph19的博客 1408

使用 MATLAB/Simulink 对风光互补发电系统进行建模

随着全球对清洁能源的需求日益增长,风力发电和光伏发电作为两种主要的可再生能源形式,在电力供应中的占比越来越高。然而,由于风电和光伏的间歇性和不确定性,单独依赖其中任何一种能源都会给电网带来挑战。因此,风光互补发电系统(Wind-PV Hybrid System)应运而生,通过合理配置风力发电机和光伏电池板的数量,可以有效提高系统的稳定性和可靠性。此外,为了确保整个电力系统的安全稳定运行,还需要研究风光互补发电系统与主网之间的协调调度策略。本教程将详细介绍如何使用。

amy_mhd的博客 118

10个Pandas数据查询案例

10个Pandas数据查询案例

weixin_46713695的博客 1215

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

cainiao_python的博客 322

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

pymongo查询列表元素_Pandas之数据查询与修改

本文作者:杨长青本文编辑:杨慧琳技术总编:张学人好消息!!!爬虫俱乐部将于2019年5月2日至4日在武汉举行Stata编程技术五一训练营,此次采用理论与案例相结合的方式,旨在帮助大家熟悉Stata数据分析技巧,能够通过编程读取不同类型的数据源、实现复杂数据合并、清洗的程序化,并且熟悉Stata核心的爬虫技术。详细培训大纲及报名方式,请点击文末阅读原文呦~在数据处理的过程中,我们经常做的是...

weixin_32685111的博客 386

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Pandas常用操作整理

- pandas读取数据 1,pandas读取纯文本文件 纯文本文件包括:csv,txt 语法:pd.read_csv(fpath) 2,读取excel文件 语法:pd.read_excel(fpath) 3,读取MySQL数据库 语法:pd.read_sql() - pandas数据结构 1,Series Series是一种类似于一维数组的对象,它由一组数据(不同数据类型)以及一组与之相关的数据标签(即索引组成) 2,DataFrame Dataframe是一个表格型的数据结构 每行可以是不同的值类型(

weixin_41403341的博客 779

个人学习pandas整理的方法与示例

pandas基本操作,pandas查询数据,pandas修改数据,pandas数据统计,pandas分类聚合,缺失值的处理,pandas数据排序

ljwzy258的博客 251

python pandas excel数据处理_Python处理Excel数据-pandas篇

Python处理Excel数据-pandas篇非常适用于大量数据的拼接、清洗、筛选及分析在计算机编程中,pandas是Python编程语言的用于数据操纵和分析的软件库。特别是,它提供操纵数值表格和时间序列的数据结构和运算操作。它的名字衍生自术语“面板数据”(panel data),这是计量经济学的数据集术语,它们包括了对同一个体的在多个时期上的观测。它的名字是短语“Python data anal...

weixin_34969621的博客 3077

Python自动查股票:有哪些好用的库和工具可用于股票数据查询

Python在股票数据查询方面有多种实用库和工具,可获取、分析股票数据,为投资者提供便利,pandas、yfinance等在处理股票数据上各有优势。

股票量化交易自动交易程序化交易接口 777

python:pandas常用操作整理

pandas常用的方法示例整理: """ 列 # df = DataFrame() # df["a"] # 显示索引取列 # df.iloc[0] # 隐试索引取列 行 df.iloc[0] # 隐试索引取列 df.loc["a"] # 显示索引取列 元素 df.loc["B","b"] df.iloc[1,1] 切行 df[0:2] 切列 df[:,0:2] """ df.drop_duplicates(keep="first") # 去重保留第一行数据 df.dropna(axis=0) # 将源数据中

weixin_49572581的博客 453

pandas学习笔记(对照SQL版)

本文总结了SQL与Pandas在数据查询和处理中的对应操作,主要包括:基础查询(选择列、去重、限制行数)、条件筛选(比较运算、范围筛选、模糊匹配)、排序、分组聚合(基础聚合、分组筛选)、表连接(内连接、左连接等)、合并(UNION)、条件计算(CASE WHEN)、窗口函数(排序排名)、透视表(PIVOT/UNPIVOT)以及空值处理。通过对比SQL语句和Pandas实现方式,帮助学习者快速掌握两种工具的转换方法,提升数据处理效率。

2401_83216390的博客 792
上一篇: 不要再写Python for循环了!
下一篇: 月薪 3.6 万,日均写 7 行代码的算法工程师被开除了!
菜鸟学Python
博客等级 码龄9年 8062粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值