Pandas查询数据df.query

2022-11-27 11:49:27 浏览数 (1)

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

0 人点赞