成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Pandas Query 方法深度總結,你學會了嗎?

數據庫 其他數據庫
事實證明實際上可以使用 query()? 方法做到這一點。因此,在今天的文章中,我們將展示如何使用 query() 方法對數據框執行查詢。

大多數 Pandas 用戶都熟悉 iloc[]? 和 loc[] 索引器方法,用于從 Pandas DataFrame 中檢索行和列。但是隨著檢索數據的規則變得越來越復雜,這些方法也隨之變得更加復雜而臃腫。

同時 SQL 也是我們經常接觸且較為熟悉的語言,那么為什么不使用類似于 SQL 的東西來查詢我們的數據呢?

事實證明實際上可以使用 query()? 方法做到這一點。因此,在今天的文章中,我們將展示如何使用 query() 方法對數據框執行查詢。

獲取數據

我們使用 kaggle 上的 Titanic 數據集作為本文章的測試數據集,下載地址如下:

https://www.kaggle.com/datasets/tedllh/titanic-train

當然也可以在文末獲取到蘿卜哥下載好的數據集

載入數據

下面文末就可以使用 read_csv 來載入數據了

import pandas as pd
df = pd.read_csv('titanic_train.csv')
df

數據集有 891 行和 12 列:

圖片

使用 query() 方法

讓我們找出從南安普敦 (‘S’) 出發的所有乘客,可以使用方括號索引,代碼如下所示:

df[df['Embarked'] == 'S']

如果使用 query() 方法,那么看起來更整潔:

df.query('Embarked == "S"')

與 SQL 比較,則 query() 方法中的表達式類似于 SQL 中的 WHERE 語句。

結果是一個 DataFrame,其中包含所有從南安普敦出發的乘客:

圖片

query() 方法接受字符串作為查詢條件串,因此,如果要查詢字符串列,則需要確保字符串被正確括起來:

圖片

很多時候,我們可能希望將變量值傳遞到查詢字符串中,可以使用 @ 字符執行此操作:

embarked = 'S'
df.query('Embarked == @embarked')

或者也可以使用 f 字符串,如下所示:

df.query(f'Embarked == "{embarked}"')

就個人而言,我認為與 f-string 方式相比,使用 @ 字符更簡單、更優雅,你認為呢

如果列名中有空格,可以使用反引號 (``) 將列名括起來:

df.query('`Embarked On` == @embarked')

以 In-place 的方式執行 query 方法

當使用 query() 方法執行查詢時,該方法將結果作為 DataFrame 返回,原始 DataFrame 保持不變。如果要更新原始 DataFrame,需要使用 inplace 參數,如下所示:

df.query('Embarked == "S"', inplace=True)

當 inplace 設置為 True 時,query() 方法將不會返回任何值,原始 DataFrame 被修改。

指定多個條件查詢

我們可以在查詢中指定多個條件,例如假設我想獲取所有從南安普敦 (‘S’) 或瑟堡 (‘C’) 出發的乘客。如果使用方括號索引,這種語法很快變得非常笨拙:

df[(df['Embarked'] == 'S') | (df['Embarked'] == 'C')]

我們注意到,在這里我們需要在查詢的條件下引用 DataFrame 兩次,而使用 query() 方法,就簡潔多了:

df.query('Embarked in ("S","C")')

查詢結果如下:

圖片

如果要查找所有不是從南安普敦(‘S’)或瑟堡(‘C’)出發的乘客,可以在 Pandas 中使用否定運算符 (~):

df[~((df['Embarked'] == 'S') | (df['Embarked'] == 'C'))]

使用 query() 方法,只需要使用 not 運算符:

df.query('Embarked not in ("S","C")')

以下輸出顯示了從皇后鎮 (‘Q’) 出發的乘客以及缺失值的乘客:

圖片

說到缺失值,該怎么查詢缺失值呢,當應用于列名時,我們可以使用 isnull() 方法查找缺失值:

df.query('Embarked.isnull()')

現在將顯示 Embarked 列中缺少值的行:

圖片

其實可以直接在列名上調用各種 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

比較數值列

我們還可以輕松比較數字列:

df.query('Fare > 50')

以下輸出顯示了票價大于 50 的所有行:

圖片

比較多個列

還可以使用 and、or 和 not 運算符比較多個列,以下語句檢索 Fare 大于 50 和 Age 大于 30 的所有行:

df.query('Fare > 50 and Age > 30')

下面是查詢結果:

圖片

查詢索引

通常當我們想根據索引值檢索行時,可以使用 loc[] 索引器,如下所示:

df.loc[[1],:]  # get the row whose index is 1; return as a dataframe

但是使用 query() 方法,使得事情變得更加直觀:

df.query('index==1')

結果如下:

圖片

如果要檢索索引值小于 5 的所有行:

df.query('index<5')

結果如下:

圖片

我們還可以指定索引值的范圍:

df.query('6 <= index < 20')

結果如下:

圖片

比較多列

我們還可以比較列之間的值,例如以下語句檢索 Parch 值大于 SibSp 值的所有行:

df.query('Parch > SibSp')

結果如下:

圖片

總結

從上面的示例可以看出,query() 方法使搜索行的語法更加自然簡潔,希望感興趣的小伙伴多加練習,真正的達到融會貫通的地步哦!

責任編輯:武曉燕 來源: 蘿卜大雜燴
相關推薦

2022-10-18 17:59:46

Bootstrap源碼父類

2024-02-05 13:52:30

?Thread對象強引用

2023-06-08 07:34:19

HDFS小文件壓縮包

2023-01-26 00:28:45

前端測試技術

2024-01-19 08:25:38

死鎖Java通信

2024-02-04 00:00:00

Effect數據組件

2023-07-26 13:11:21

ChatGPT平臺工具

2023-01-10 08:43:15

定義DDD架構

2024-01-10 07:38:08

2022-12-22 08:14:54

2023-10-10 11:04:11

Rust難點內存

2024-05-06 00:00:00

InnoDBView隔離

2024-07-31 08:39:45

Git命令暫存區

2023-01-30 09:01:54

圖表指南圖形化

2024-08-06 09:47:57

2022-07-08 09:27:48

CSSIFC模型

2023-12-12 08:02:10

2023-12-07 07:03:09

2024-11-11 00:00:00

getHTML()DOM結構

2024-06-18 08:22:51

ActivityUI線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久蜜桃一区二区 | 精品一区二区av | 欧美精品一区二区免费视频 | 国产羞羞视频在线观看 | 在线一区视频 | 色偷偷噜噜噜亚洲男人 | 欧美日韩国产一区二区 | 一级黄色片免费在线观看 | 午夜视频在线观看视频 | 亚洲区一区二 | 精品久久精品 | 久久久成人动漫 | 日韩欧美一区二区三区四区 | 99精品久久 | 日韩欧美亚洲 | 国产精品视频一区二区三区四蜜臂 | 久久夜视频 | 毛片入口 | 伊人性伊人情综合网 | 男人天堂视频在线观看 | 国产精品精品 | 国产精品久久亚洲 | 国产高清精品在线 | 亚卅毛片 | 久久亚洲国产精品日日av夜夜 | 韩国精品在线观看 | 国产精品美女久久久久aⅴ国产馆 | 国产精品久久久久久久久久不蜜臀 | 亚洲精品中文字幕在线 | 色婷婷综合网站 | 国产精品久久 | av免费看片| 九九亚洲精品 | 国产三级大片 | 久久久91精品国产一区二区三区 | 国产一二区在线 | 日本在线精品视频 | av手机在线 | 久热m3u8| 欧美日韩国产中文 | 亚洲精品在线免费看 |