Pandas查詢數(shù)據(jù)df.query的使用
方法對(duì)比:
使用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級(jí) | 59 | 良 | 2 |
| 1 | 2018-01-02 | 2℃ | -5℃ | 陰~多云 | 東北風(fēng) | 1-2級(jí) | 49 | 優(yōu) | 1 |
| 2 | 2018-01-03 | 2℃ | -5℃ | 多云 | 北風(fēng) | 1-2級(jí) | 28 | 優(yōu) | 1 |
| 3 | 2018-01-04 | 0℃ | -8℃ | 陰 | 東北風(fēng) | 1-2級(jí) | 28 | 優(yōu) | 1 |
| 4 | 2018-01-05 | 3℃ | -6℃ | 多云~晴 | 西北風(fēng) | 1-2級(jí) | 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級(jí) | 31 | 優(yōu) | 1 |
| 23 | 2018-01-24 | -4 | -11 | 晴 | 西南風(fēng) | 1-2級(jí) | 34 | 優(yōu) | 1 |
| 24 | 2018-01-25 | -3 | -11 | 多云 | 東北風(fēng) | 1-2級(jí) | 27 | 優(yōu) | 1 |
| 359 | 2018-12-26 | -2 | -11 | 晴~多云 | 東北風(fēng) | 2級(jí) | 26 | 優(yōu) | 1 |
| 360 | 2018-12-27 | -5 | -12 | 多云~晴 | 西北風(fēng) | 3級(jí) | 48 | 優(yōu) | 1 |
復(fù)雜條件查詢
注意,組合條件用&符號(hào)合并,每個(gè)條件判斷都得帶括號(hào)
## 查詢最高溫度小于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級(jí) | 40 | 優(yōu) | 1 |
| 249 | 2018-09-07 | 27 | 16 | 晴 | 西北風(fēng) | 3-4級(jí) | 22 | 優(yōu) | 1 |
使用df.query可以簡(jiǎn)化查詢
形式:DataFrame.query(expr, inplace=False, **kwargs)
其中expr為要返回boolean結(jié)果的字符串表達(dá)式
形如:
- df.query(‘a<100’)
- df.query(‘a < b & b < c’),或者df.query(’(a<b)&(b<c)’)
df.query可支持的表達(dá)式語(yǔ)法:
- 邏輯操作符: &, |, ~
- 比較操作符: <, <=, ==, !=, >=, >
- 單變量操作符: -
- 多變量操作符: +, -, *, /, %
df.query中可以使用@var的方式傳入外部變量
df.query支持的語(yǔ)法來(lái)自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級(jí) | 59 | 良 | 2 |
| 1 | 2018-01-02 | 2 | -5 | 陰~多云 | 東北風(fēng) | 1-2級(jí) | 49 | 優(yōu) | 1 |
| 2 | 2018-01-03 | 2 | -5 | 多云 | 北風(fēng) | 1-2級(jí) | 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級(jí) | 40 | 優(yōu) | 1 |
| 249 | 2018-09-07 | 27 | 16 | 晴 | 西北風(fēng) | 3-4級(jí) | 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級(jí) | 171 | 中度污染 | 4 |
| 82 | 2018-03-24 | 22 | 5 | 晴 | 西南風(fēng) | 1-2級(jí) | 119 | 輕度污染 | 3 |
| 83 | 2018-03-25 | 24 | 7 | 晴 | 南風(fēng) | 1-2級(jí) | 78 | 良 | 2 |
| 84 | 2018-03-26 | 25 | 7 | 多云 | 西南風(fēng) | 1-2級(jí) | 151 | 中度污染 | 4 |
| 85 | 2018-03-27 | 27 | 11 | 晴 | 南風(fēng) | 1-2級(jí) | 243 | 重度污染 | 5 |
可以使用外部的變量
# 查詢溫度在這兩個(gè)溫度之間的數(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級(jí) | 147 | 輕度污染 | 3 |
| 108 | 2018-04-19 | 26 | 13 | 多云 | 東南風(fēng) | 4-5級(jí) | 170 | 中度污染 | 4 |
| 109 | 2018-04-20 | 28 | 14 | 多云~小雨 | 南風(fēng) | 4-5級(jí) | 164 | 中度污染 | 4 |
| 116 | 2018-04-27 | 25 | 13 | 晴 | 西南風(fēng) | 3-4級(jí) | 112 | 輕度污染 | 3 |
| 119 | 2018-04-30 | 24 | 14 | 多云 | 南風(fēng) | 3-4級(jí) | 62 | 良 | 2 |
到此這篇關(guān)于Pandas查詢數(shù)據(jù)df.query的使用的文章就介紹到這了,更多相關(guān)Pandas查詢數(shù)據(jù)df.query 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python發(fā)展史及網(wǎng)絡(luò)爬蟲(chóng)
Python 是一個(gè)高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言。這篇文章給大家介紹了python發(fā)展史及網(wǎng)絡(luò)爬蟲(chóng)知識(shí),感興趣的朋友跟隨小編一起看看吧2019-06-06
Python實(shí)現(xiàn)將MongoDB中的數(shù)據(jù)導(dǎo)入到MySQL
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Python封裝一個(gè)將?MongoDB?中的數(shù)據(jù)導(dǎo)入到?MySQL?中的?Python?工具類?MongoToMysql,感興趣的可以了解一下2023-05-05
詳解KMP算法以及python如何實(shí)現(xiàn)
這篇文章主要介紹了KMP算法的相關(guān)知識(shí)以及python如何實(shí)現(xiàn),幫助大家更好的進(jìn)行數(shù)據(jù)分析,感興趣的朋友可以了解下2020-09-09
Python通過(guò)dxfgrabber庫(kù)實(shí)現(xiàn)獲取CAD信息
dxfgrabber?是一個(gè)?Python?庫(kù),用于讀取和解析?AutoCAD?DXF(Drawing?Exchange?Format)文件,本文就來(lái)教教大家如何利用dxfgrabber庫(kù)實(shí)現(xiàn)獲取CAD信息吧2023-06-06
Python如何使用__slots__實(shí)現(xiàn)節(jié)省內(nèi)存和性能優(yōu)化
你有想過(guò),一個(gè)小小的 __slots__ 能讓你的 Python 類內(nèi)存消耗直接減半嗎,沒(méi)錯(cuò),今天咱們要聊的就是這個(gè)讓人眼前一亮的技巧,感興趣的小伙伴可以了解下2025-03-03
Python基于OpenCV實(shí)現(xiàn)視頻的人臉檢測(cè)
這篇文章主要為大家詳細(xì)介紹了Python基于OpenCV實(shí)現(xiàn)視頻的人臉檢測(cè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
使用keras實(shí)現(xiàn)孿生網(wǎng)絡(luò)中的權(quán)值共享教程
這篇文章主要介紹了使用keras實(shí)現(xiàn)孿生網(wǎng)絡(luò)中的權(quán)值共享教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
解決tensorflow訓(xùn)練時(shí)內(nèi)存持續(xù)增加并占滿的問(wèn)題
今天小編就為大家分享一篇解決tensorflow訓(xùn)練時(shí)內(nèi)存持續(xù)增加并占滿的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01

