您好,登錄后才能下訂單哦!
這篇文章主要講解了“Pandas Query方法如何使用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Pandas Query方法如何使用”吧!
下面文末就可以使用 read_csv 來載入數(shù)據(jù)了
import pandas as pd df = pd.read_csv('titanic_train.csv') df
數(shù)據(jù)集有 891 行和 12 列:
讓我們找出從南安普敦 (‘S’) 出發(fā)的所有乘客,可以使用方括號索引,代碼如下所示:
df[df['Embarked'] == 'S']
如果使用 query()
方法,那么看起來更整潔:
df.query('Embarked == "S"')
與 SQL 比較,則 query() 方法中的表達(dá)式類似于 SQL 中的 WHERE 語句。
結(jié)果是一個 DataFrame,其中包含所有從南安普敦出發(fā)的乘客:
query() 方法接受字符串作為查詢條件串,因此,如果要查詢字符串列,則需要確保字符串被正確括起來:
很多時候,我們可能希望將變量值傳遞到查詢字符串中,可以使用 @ 字符執(zhí)行此操作:
embarked = 'S' df.query('Embarked == @embarked')
或者也可以使用 f 字符串,如下所示:
df.query(f'Embarked == "{embarked}"')
就個人而言,我認(rèn)為與 f-string 方式相比,使用 @ 字符更簡單、更優(yōu)雅,你認(rèn)為呢
如果列名中有空格,可以使用反引號 (``) 將列名括起來:
df.query('`Embarked On` == @embarked')
當(dāng)使用 query() 方法執(zhí)行查詢時,該方法將結(jié)果作為 DataFrame 返回,原始 DataFrame 保持不變。如果要更新原始 DataFrame,需要使用 inplace 參數(shù),如下所示:
df.query('Embarked == "S"', inplace=True)
當(dāng) inplace 設(shè)置為 True 時,query()
方法將不會返回任何值,原始 DataFrame 被修改。
我們可以在查詢中指定多個條件,例如假設(shè)我想獲取所有從南安普敦 (‘S’) 或瑟堡 (‘C’) 出發(fā)的乘客。如果使用方括號索引,這種語法很快變得非常笨拙:
df[(df['Embarked'] == 'S') | (df['Embarked'] == 'C')]
我們注意到,在這里我們需要在查詢的條件下引用 DataFrame 兩次,而使用 query() 方法,就簡潔多了:
df.query('Embarked in ("S","C")')
查詢結(jié)果如下
如果要查找所有不是從南安普敦(‘S’)或瑟堡(‘C’)出發(fā)的乘客,可以在 Pandas 中使用否定運(yùn)算符 (~):
df[~((df['Embarked'] == 'S') | (df['Embarked'] == 'C'))]
使用 query()
方法,只需要使用 not 運(yùn)算符:
df.query('Embarked not in ("S","C")')
以下輸出顯示了從皇后鎮(zhèn) (‘Q’) 出發(fā)的乘客以及缺失值的乘客:
說到缺失值,該怎么查詢?nèi)笔е的?,?dāng)應(yīng)用于列名時,我們可以使用 isnull() 方法查找缺失值:
df.query('Embarked.isnull()')
現(xiàn)在將顯示 Embarked 列中缺少值的行:
其實(shí)可以直接在列名上調(diào)用各種 Series 方法:
df.query('Name.str.len() < 20') # find passengers whose name is # less than 20 characters df.query(f'Ticket.str.startswith("A")') # find all passengers whose # ticket starts with A
我們還可以輕松比較數(shù)字列:
df.query('Fare > 50')
以下輸出顯示了票價大于 50 的所有行:
還可以使用 and、or 和 not 運(yùn)算符比較多個列,以下語句檢索 Fare 大于 50 和 Age 大于 30 的所有行:
df.query('Fare > 50 and Age > 30')
下面是查詢結(jié)果
通常當(dāng)我們想根據(jù)索引值檢索行時,可以使用 loc[]
索引器,如下所示:
df.loc[[1],:] # get the row whose index is 1; return as a dataframe
但是使用 query() 方法,使得事情變得更加直觀:
df.query('index==1')
結(jié)果如下
如果要檢索索引值小于 5 的所有行:
df.query('index<5')
結(jié)果如下
我們還可以指定索引值的范圍:
df.query('6 <= index < 20')
結(jié)果如下
我們還可以比較列之間的值,例如以下語句檢索 Parch 值大于 SibSp 值的所有行:
df.query('Parch > SibSp')
結(jié)果如下
感謝各位的閱讀,以上就是“Pandas Query方法如何使用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Pandas Query方法如何使用這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。