首页 > 其他分享 >别再低效筛选数据了!试试pandas query函数

别再低效筛选数据了!试试pandas query函数

时间:2024-03-04 20:11:19浏览次数:20  
标签:低效 head totalPrice df 查询 query 数据 pandas

数据过滤在数据分析过程中具有极其重要的地位,因为在真实世界的数据集中,往往存在重复、缺失或异常的数据。
pandas提供的数据过滤功能可以帮助我们轻松地识别和处理这些问题数据,从而确保数据的质量和准确性。

今天介绍的query函数,为我们提供了强大灵活的数据过滤方式,有助于从复杂的数据集中提取有价值的信息,提高分析的效率。

1. 准备数据

下面的示例中使用的数据采集自链家网的真实房屋成交数据。
数据下载地址:https://databook.top/

导入数据:

import pandas as pd

fp = "D:/data/南京二手房交易/南京建邺区.csv"

df = pd.read_csv(fp)
df.head()

image.png

2. query 使用示例

query提供的查询接口非常灵活,可以用类似sql的方式组合查询条件。

2.1. 比较

比较是最常用的过滤手段,
比如:相等比较,检索2023年3月1日的成交数据。

df.query('dealDate == "2023.03.01"').head()

image.png

同样,也可以进行大于或者小于的比较:

# 成交总价大于1000万的房屋
df.query('totalPrice > 1000').head()

image.png

# 成交总价小于100万的房屋
df.query('totalPrice < 100').head()

image.png

2.2. 多条件组合

query函数中组合查询条件也非常简单,它的查询字符串中可以直接使用逻辑运算符
比如,逻辑与的查询,用 & 来连接查询条件。

# 总价大于1000万,且每平米单价小于6万的房屋
df.query('totalPrice > 1000 & unitPrice < 60000').head()

image.png

逻辑或的查询,用|来连接查询条件。

# 总价小于200万,或者每平米单价小于3万的房屋
df.query('totalPrice < 200 | unitPrice < 30000').head()

image.png
因为是逻辑或,两个条件满足一个就行,所以查询出的数据有总价大于200万,也有单价大于3万的数据。

还有一个逻辑非的运算,用 not 关键字来表示。

2.3. 模糊查询

除了比较,也可以对字符串进行模糊查询,类似sql中的LIKE检索。
比如,查询名称包含万科的楼盘。

# 名称包含万科
df.query('name.str.contains("万科")').head(5)

image.png

包含的字符串也支持正则表达式匹配,比如,查询万科楼盘中3室的房屋。

df.query('name.str.contains("万科.*3室")').head(5)

image.png

2.4. 匹配列表

查询时,可以匹配某个列表中的一项,类似于SQL中的IN检索。
比如,查询任意三个日期的房屋成交信息,且总价大于500万。

dates = ["2023.02.28", "2022.12.11", "2022.04.10"]
df.query('totalPrice > 600 & dealDate == @dates').head(5)

image.png

3. 总结

pandasDataFrame提供了各种过滤检索数据的方式,与之相比,query函数允许用户以字符串的形式对DataFrame进行查询操作。
这样的好处有:

  1. 直观易读:类似SQL的语法,且查询语句以字符串形式表示,易于理解和阅读,有助于提高代码的可读性
  2. 灵活性高:支持复杂的查询条件,可以通过逻辑运算符组合多个条件,也支持模糊的匹配方式
  3. 减少代码量:可以减少编写过滤和条件判断的代码量,使代码更加简洁
  4. 易于调试:由于查询语句以字符串形式表示,因此在调试过程中可以轻松地打印和查看查询条件

标签:低效,head,totalPrice,df,查询,query,数据,pandas
From: https://www.cnblogs.com/wang_yb/p/18052559

相关文章

  • jQuery弹出窗口
    </html><!DOCTYPEHTMLPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv=......
  • pandas df 将两列转换为字典格式
    修改df列名importpandasaspdimportjsondata={'keys':['a','b','c','d'],'values':[1,2,3,4]}columns_mapping={'keys':'keys11','values':�......
  • jquery ui和easyui的区别是什么?
    EasyUI是某公司开发的一套对私免费,对公收费的UI库,基于GNU开源协议,不过只有付费了才能买到他们的源代码。是目前枯人接触过最优秀的一款基于jQuery的UI库,整体打包后不到300k,几乎包含所有的常用组件。jqueryui和easyui的区别jqueryui是jQuery插件,是由jQuery官方维护的UI方向的插件;e......
  • 实现一个链式调用的query方法
    提供了一个数组结构的data,要求实现一个query方法,返回一个新的数组,query方法内部有过滤、排序、分组等操作,并且支持链式调用,调用最终的execute方法返回结果你可以按照以下步骤实现这个query方法:定义一个数组结构的data,例如:constdata=[{id:1,name:'Ali......
  • Balance Update Query
    link省选前写点简单题攒rp。显然每次选择,我们应该将所有物品从大到小排序,每次选择最大的\(x\)个。也就是每次要求前\(x\)大的数的和,随手写个平衡树可以做到这一操作,但是我不会,这里选择权值线段树来存贮每个数的个数,用线段树上二分解决前\(x\)大的数的和。注意离散化和......
  • python | Pandas.unique()函数
    unique()是Pandas中的一个函数,用于获取Series或DataFrame中的唯一值,它返回一个包含Series或DataFrame中唯一值的数组,按照它们在原始数据中的出现顺序排列。对于足够长的序列,比numpy.unique快得多。包括NA值。data={'Name':['John','Tom','Alice','John'],'Ag......
  • 【3.0】前端基础jQuery之进阶
    【一】操作标签【1】操作类(1)JS版本[1]classList.add()方法用于向元素添加一个或多个类名。如果指定的类名已存在,则不会添加。element.classList.add("class1","class2");[2]classList.remove()方法用于从元素移除一个或多个类名。如果指定的类名不存在,则不会......
  • 【2.0】前端基础jQuery之引入
    【一】jQuery基本语法【1】基本语法jQuery(选择器).action()【2】简写秉承jQuery宗旨,jQuery简写成$jQuery(选择器)---->$(选择器)【二】jQuery与原生JS代码比较将P标签内部的文本颜色改成红色<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-......
  • 【1.0】jQuery引入
    【一】什么是jQuery【1】概述jQuery是一个轻量级的、兼容多浏览器的JavaScript库。jQuery使用户能够更方便地处理HTMLDocument、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。它的宗旨就是:“Writeless,domore.“【2】小结jQuery内部封装......
  • pandas | value_counts()的用法
    value_counts()方法返回一个序列Series,该序列用于统计某列中各个值的出现次数的函数。当配合参数bins使用时,它可以将数据分成指定的区间,然后统计每个区间内值的出现次数。value_counts()是Series拥有的方法,一般在DataFrame中使用时,需要指定对哪一列或行使用。value_counts()只......