日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Pandas查詢數(shù)據(jù)df.query的使用_python

作者:北山啦 ? 更新時間: 2022-09-17 編程語言

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

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℃ 晴~多云 東北風(fēng) 1-2級 59 2
1 2018-01-02 2℃ -5℃ 陰~多云 東北風(fēng) 1-2級 49 優(yōu) 1
2 2018-01-03 2℃ -5℃ 多云 北風(fēng) 1-2級 28 優(yōu) 1
3 2018-01-04 0℃ -8℃ 東北風(fēng) 1-2級 28 優(yōu) 1
4 2018-01-05 3℃ -6℃ 多云~晴 西北風(fēng) 1-2級 50 優(yōu) 1
# 替換掉溫度的后綴℃
df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype('int32')
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype('int32')

使用dataframe條件表達(dá)式查詢

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

df[df["yWendu"] < -10].head()
? ymd bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
22 2018-01-23 -4 -12 西北風(fēng) 3-4級 31 優(yōu) 1
23 2018-01-24 -4 -11 西南風(fēng) 1-2級 34 優(yōu) 1
24 2018-01-25 -3 -11 多云 東北風(fēng) 1-2級 27 優(yōu) 1
359 2018-12-26 -2 -11 晴~多云 東北風(fēng) 2級 26 優(yōu) 1
360 2018-12-27 -5 -12 多云~晴 西北風(fēng) 3級 48 優(yōu) 1

復(fù)雜條件查詢

注意,組合條件用&符號合并,每個條件判斷都得帶括號

## 查詢最高溫度小于30度,并且最低溫度大于15度,并且是晴天,并且天氣為優(yōu)的數(shù)據(jù)
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 北風(fēng) 1-2級 40 優(yōu) 1
249 2018-09-07 27 16 西北風(fēng) 3-4級 22 優(yōu) 1

使用df.query可以簡化查詢

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

其中expr為要返回boolean結(jié)果的字符串表達(dá)式

形如:

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

df.query可支持的表達(dá)式語法:

  • 邏輯操作符: &, |, ~
  • 比較操作符: <, <=, ==, !=, >=, >
  • 單變量操作符: -
  • 多變量操作符: +, -, *, /, %

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

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

查詢最低溫度低于-10度的列表

df.query("yWendu < 3").head(3)
? ymd bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
0 2018-01-01 3 -6 晴~多云 東北風(fēng) 1-2級 59 2
1 2018-01-02 2 -5 陰~多云 東北風(fēng) 1-2級 49 優(yōu) 1
2 2018-01-03 2 -5 多云 北風(fēng) 1-2級 28 優(yōu) 1

查詢最高溫度小于30度,并且最低溫度大于15度,并且是晴天,并且天氣為優(yōu)的數(shù)據(jù)

## 查詢最高溫度小于30度,并且最低溫度大于15度,并且是晴天,并且天氣為優(yōu)的數(shù)據(jù)
df.query("bWendu<=30 & yWendu>=15 & tianqi=='晴' & aqiLevel==1")
? ymd bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
235 2018-08-24 30 20 北風(fēng) 1-2級 40 優(yōu) 1
249 2018-09-07 27 16 西北風(fēng) 3-4級 22 優(yōu) 1

查詢溫差大于15度的日子

df.query("bWendu-yWendu >= 15").head()
? ymd bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
68 2018-03-10 14 -2 東南風(fēng) 1-2級 171 中度污染 4
82 2018-03-24 22 5 西南風(fēng) 1-2級 119 輕度污染 3
83 2018-03-25 24 7 南風(fēng) 1-2級 78 2
84 2018-03-26 25 7 多云 西南風(fēng) 1-2級 151 中度污染 4
85 2018-03-27 27 11 南風(fēng) 1-2級 243 重度污染 5

可以使用外部的變量

# 查詢溫度在這兩個溫度之間的數(shù)據(jù)
high_temperature = 15
low_temperature = 13
df.query("yWendu<=@high_temperature & yWendu>=@low_temperature").head()
? ymd bWendu yWendu tianqi fengxiang fengli aqi aqiInfo aqiLevel
107 2018-04-18 27 14 多云~晴 西南風(fēng) 3-4級 147 輕度污染 3
108 2018-04-19 26 13 多云 東南風(fēng) 4-5級 170 中度污染 4
109 2018-04-20 28 14 多云~小雨 南風(fēng) 4-5級 164 中度污染 4
116 2018-04-27 25 13 西南風(fēng) 3-4級 112 輕度污染 3
119 2018-04-30 24 14 多云 南風(fēng) 3-4級 62 2

原文鏈接:https://blog.csdn.net/qq_45176548/article/details/112755795

欄目分類
最近更新