Pandas查询数据df.query的使用

作者:北山啦 时间:2021-06-09 03:48:47 

方法对比:
使用df[(df[&ldquo;a&rdquo;] > 3) & (df[&ldquo;b&rdquo;]<5)]的方式;
使用df.query(&ldquo;a>3 & b<5&rdquo;)的方式;

df = pd.read_csv("beijing_tianqi_2018.csv")
df.head()
 ymdbWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel
02018-01-013℃-6℃晴~多云东北风1-2级592
12018-01-022℃-5℃阴~多云东北风1-2级491
22018-01-032℃-5℃多云北风1-2级281
32018-01-040℃-8℃东北风1-2级281
42018-01-053℃-6℃多云~晴西北风1-2级501
# 替换掉温度的后缀℃
df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype('int32')
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype('int32')

使用dataframe条件表达式查询

最低温度低于-10度的列表

df[df["yWendu"] < -10].head()
 ymdbWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel
222018-01-23-4-12西北风3-4级311
232018-01-24-4-11西南风1-2级341
242018-01-25-3-11多云东北风1-2级271
3592018-12-26-2-11晴~多云东北风2级261
3602018-12-27-5-12多云~晴西北风3级481

复杂条件查询

注意,组合条件用&符号合并,每个条件判断都得带括号

## 查询最高温度小于30度,并且最低温度大于15度,并且是晴天,并且天气为优的数据
df[
   (df["bWendu"]<=30)
   & (df["yWendu"]>=15)
   & (df["tianqi"]=='晴')
   & (df["aqiLevel"]==1)]
 ymdbWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel
2352018-08-243020北风1-2级401
2492018-09-072716西北风3-4级221

使用df.query可以简化查询

形式:DataFrame.query(expr, inplace=False, **kwargs)

其中expr为要返回boolean结果的字符串表达式

形如:

  • df.query(&lsquo;a<100&rsquo;)

  • df.query(&lsquo;a < b & b < c&rsquo;),或者df.query(&rsquo;(a<b)&(b<c)&rsquo;)

df.query可支持的表达式语法:

  • 逻辑操作符: &, |, ~

  • 比较操作符: <, <=, ==, !=, >=, >

  • 单变量操作符: -

  • 多变量操作符: +, -, *, /, %

df.query中可以使用@var的方式传入外部变量

df.query支持的语法来自NumExpr,地址:
https://numexpr.readthedocs.io/projects/NumExpr3/en/latest/index.html

查询最低温度低于-10度的列表

df.query("yWendu < 3").head(3)
 ymdbWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel
02018-01-013-6晴~多云东北风1-2级592
12018-01-022-5阴~多云东北风1-2级491
22018-01-032-5多云北风1-2级281

查询最高温度小于30度,并且最低温度大于15度,并且是晴天,并且天气为优的数据

## 查询最高温度小于30度,并且最低温度大于15度,并且是晴天,并且天气为优的数据
df.query("bWendu<=30 & yWendu>=15 & tianqi=='晴' & aqiLevel==1")
 ymdbWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel
2352018-08-243020北风1-2级401
2492018-09-072716西北风3-4级221

查询温差大于15度的日子

df.query("bWendu-yWendu >= 15").head()
 ymdbWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel
682018-03-1014-2东南风1-2级171中度污染4
822018-03-24225西南风1-2级119轻度污染3
832018-03-25247南风1-2级782
842018-03-26257多云西南风1-2级151中度污染4
852018-03-272711南风1-2级243重度污染5

可以使用外部的变量

# 查询温度在这两个温度之间的数据
high_temperature = 15
low_temperature = 13
df.query("yWendu<=@high_temperature & yWendu>=@low_temperature").head()
 ymdbWenduyWendutianqifengxiangfengliaqiaqiInfoaqiLevel
1072018-04-182714多云~晴西南风3-4级147轻度污染3
1082018-04-192613多云东南风4-5级170中度污染4
1092018-04-202814多云~小雨南风4-5级164中度污染4
1162018-04-272513西南风3-4级112轻度污染3
1192018-04-302414多云南风3-4级622

来源:https://blog.csdn.net/qq_45176548/article/details/112755795

标签:Pandas,df.query
0
投稿

猜你喜欢

  • python合并文本文件示例

    2021-05-08 01:24:49
  • python爬虫框架scrapy代理中间件掌握学习教程

    2021-03-22 15:34:54
  • python 算法 排序实现快速排序

    2022-09-04 03:20:17
  • django缓存配置的几种方法详解

    2022-08-29 02:37:16
  • Python转换字典成为对象,可以用"."方式访问对象属性实例

    2021-06-01 09:01:50
  • Django中的CBV和FBV示例介绍

    2022-05-23 10:13:59
  • pytorch 优化器(optim)不同参数组,不同学习率设置的操作

    2021-09-14 05:05:44
  • Python新手学习标准库模块命名

    2021-01-16 05:18:06
  • django2.0扩展用户字段示例

    2023-08-31 11:10:10
  • SQL Server 2005数据库批量更新解决办法

    2009-04-11 16:12:00
  • MySQL中SQL Mode的查看与设置详解

    2024-01-26 12:14:08
  • asp学习入门基本语法知识

    2007-11-07 14:02:00
  • 玩体验,先忘掉自己

    2010-01-30 13:36:00
  • PHP html_entity_decode()函数讲解

    2023-06-01 00:59:43
  • 改善登陆界面的用户体验: 自动聚焦表单

    2009-12-09 16:13:00
  • 读写json中文ASCII乱码问题的解决方法

    2023-02-13 02:32:25
  • 个人从事设计行业40句观感

    2008-04-07 13:58:00
  • 解析:快速的掌握 MySQL支持的操作系统

    2008-12-31 17:18:00
  • Python变量及数据类型用法原理汇总

    2022-12-04 11:11:41
  • IE地址栏显示网站图标制作方法

    2007-10-13 11:08:00
  • asp之家 网络编程 m.aspxhome.com