前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pandas查询数据df.query

Pandas查询数据df.query

作者头像
北山啦
发布2022-11-27 11:49:27
5530
发布2022-11-27 11:49:27
举报
文章被收录于专栏:北山啦的博客

Pandas查询数据的简便方法df.query

pandas中数据查询query函数

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

代码语言:javascript
复制
df = pd.read_csv("beijing_tianqi_2018.csv")
df.head()

ymd

bWendu

yWendu

tianqi

fengxiang

fengli

aqi

aqiInfo

aqiLevel

0

2018-01-01

3℃

-6℃

晴~多云

东北风

1-2级

59

2

1

2018-01-02

2℃

-5℃

阴~多云

东北风

1-2级

49

1

2

2018-01-03

2℃

-5℃

多云

北风

1-2级

28

1

3

2018-01-04

0℃

-8℃

东北风

1-2级

28

1

4

2018-01-05

3℃

-6℃

多云~晴

西北风

1-2级

50

1

代码语言:javascript
复制
# 替换掉温度的后缀℃
df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype('int32')
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype('int32')

使用dataframe条件表达式查询

最低温度低于-10度的列表
代码语言:javascript
复制
df[df["yWendu"] < -10].head()

ymd

bWendu

yWendu

tianqi

fengxiang

fengli

aqi

aqiInfo

aqiLevel

22

2018-01-23

-4

-12

西北风

3-4级

31

1

23

2018-01-24

-4

-11

西南风

1-2级

34

1

24

2018-01-25

-3

-11

多云

东北风

1-2级

27

1

359

2018-12-26

-2

-11

晴~多云

东北风

2级

26

1

360

2018-12-27

-5

-12

多云~晴

西北风

3级

48

1

复杂条件查询

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

代码语言:javascript
复制
## 查询最高温度小于30度,并且最低温度大于15度,并且是晴天,并且天气为优的数据
df[
    (df["bWendu"]<=30) 
    & (df["yWendu"]>=15) 
    & (df["tianqi"]=='晴') 
    & (df["aqiLevel"]==1)]

ymd

bWendu

yWendu

tianqi

fengxiang

fengli

aqi

aqiInfo

aqiLevel

235

2018-08-24

30

20

北风

1-2级

40

1

249

2018-09-07

27

16

西北风

3-4级

22

1

使用df.query可以简化查询

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

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

形如:

  • df.query(‘a<100’)
  • df.query(‘a < b & b < c’),或者df.query(’(a<b)&(b<c)’)

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

  • 逻辑操作符: &, |, ~
  • 比较操作符: <, <=, ==, !=, >=, >
  • 单变量操作符: -
  • 多变量操作符: +, -, *, /, %

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

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

查询最低温度低于-10度的列表
代码语言:javascript
复制
df.query("yWendu < 3").head(3)

ymd

bWendu

yWendu

tianqi

fengxiang

fengli

aqi

aqiInfo

aqiLevel

0

2018-01-01

3

-6

晴~多云

东北风

1-2级

59

2

1

2018-01-02

2

-5

阴~多云

东北风

1-2级

49

1

2

2018-01-03

2

-5

多云

北风

1-2级

28

1

查询最高温度小于30度,并且最低温度大于15度,并且是晴天,并且天气为优的数据
代码语言:javascript
复制
## 查询最高温度小于30度,并且最低温度大于15度,并且是晴天,并且天气为优的数据
df.query("bWendu<=30 & yWendu>=15 & tianqi=='晴' & aqiLevel==1")

ymd

bWendu

yWendu

tianqi

fengxiang

fengli

aqi

aqiInfo

aqiLevel

235

2018-08-24

30

20

北风

1-2级

40

1

249

2018-09-07

27

16

西北风

3-4级

22

1

查询温差大于15度的日子
代码语言:javascript
复制
df.query("bWendu-yWendu >= 15").head()

ymd

bWendu

yWendu

tianqi

fengxiang

fengli

aqi

aqiInfo

aqiLevel

68

2018-03-10

14

-2

东南风

1-2级

171

中度污染

4

82

2018-03-24

22

5

西南风

1-2级

119

轻度污染

3

83

2018-03-25

24

7

南风

1-2级

78

2

84

2018-03-26

25

7

多云

西南风

1-2级

151

中度污染

4

85

2018-03-27

27

11

南风

1-2级

243

重度污染

5

可以使用外部的变量
代码语言:javascript
复制
# 查询温度在这两个温度之间的数据
high_temperature = 15
low_temperature = 13
代码语言:javascript
复制
df.query("yWendu<=@high_temperature & yWendu>=@low_temperature").head()

ymd

bWendu

yWendu

tianqi

fengxiang

fengli

aqi

aqiInfo

aqiLevel

107

2018-04-18

27

14

多云~晴

西南风

3-4级

147

轻度污染

3

108

2018-04-19

26

13

多云

东南风

4-5级

170

中度污染

4

109

2018-04-20

28

14

多云~小雨

南风

4-5级

164

中度污染

4

116

2018-04-27

25

13

西南风

3-4级

112

轻度污染

3

119

2018-04-30

24

14

多云

南风

3-4级

62

2

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Pandas查询数据的简便方法df.query
    • 使用dataframe条件表达式查询
      • 最低温度低于-10度的列表
      • 复杂条件查询
    • 使用df.query可以简化查询
      • 查询最低温度低于-10度的列表
      • 查询最高温度小于30度,并且最低温度大于15度,并且是晴天,并且天气为优的数据
      • 查询温差大于15度的日子
      • 可以使用外部的变量
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档