Pandas高階 query方法教你優雅的查詢

2021-10-12 10:06:14 字數 1579 閱讀 1781

好久好久沒寫部落格了。最近看到個很實用的pandas方法,記錄下。

dataframe.query(expr, inplace=false, **kwargs),用於通過boolean表示式來查詢dataframe中的列。

主要引數為expr,它是字串表示式,有如下說明:

可以引用變數,方法是在變數前新增乙個@字元,例如@a + b。

可以在反引號內將包含空格或運算子的列名引用起來。 這樣,您還可以轉義以數字開頭或python關鍵字的名稱。 基本上是無效的python識別符號。 

例如,如果有一列稱為a a,而您想將其與b相加,則查詢應為`a a` + b。

df = pd.dataframe()

df a b c c

0 1 10 10

1 2 8 9

2 3 6 8

3 4 4 7

4 5 2 6

如果我要查詢a列值大於b列值的結果,正常情況我們會做如下操作:

df[df.a > df.b]  或  df[df['a'] > df['b']]

a b c c

4 5 2 6

然而這不夠優雅,使用query可以簡化**:

df.query('a > b ')

a b c c

4 5 2 6

用同樣的方法,查詢b列和c c列相等的資料:

df.query('b == `c c`')

a b c c

0 1 10 10

注意對於c c列的列名中間有空格或運算子等其他特殊符號的情況,上文提到,要用反引號(就是鍵盤上第二排第乙個按鍵,有『~』這個符號的按鍵)。

上述表示式等同於:

df[df.b == df['c c']]
你以為這就完了?如果這樣我也沒必要寫這篇部落格了。

上面都是單一條件查詢,若涉及多個條件查詢,情況如何呢?

如我要查詢a列小於b列,且a列小於c c列的資料,一般情況我們會做如下寫法:

df[(df['a'] < df['b']) & (df['a'] < df['c c'])]

a b c c

0 1 10 10

1 2 8 9

2 3 6 8

用query方法簡潔如下:

df.query('a < b & a < `c c`')

a b c c

0 1 10 10

1 2 8 9

2 3 6 8

再比如,我要查詢a列小於b列,加上a列值為4的資料,query方法如下:

df.query('a < b | a == 4')

a b c c

0 1 10 10

1 2 8 9

2 3 6 8

3 4 4 7

是不是高階而又優雅,符合python的精髓。

以後資料篩選或查詢就用query吧!

高階查詢query

子條查詢 特定字段查詢所有特定值 子條件查詢 query context filter context 兩種查詢方式 1 query context 在查詢過程中,除了判斷文件是否滿足查詢條件之外,es還會計算乙個 score來標識匹配的程度,旨在判斷目標文件和查詢條件匹配的有多好 吻合度 常用查詢...

pandas 高階使用

目錄 csv comma separated values 格式的檔案是指以純文字形式儲存的 資料,這意味著不能簡單的使用excel 工具進行處理,而且excel 處理的資料量十分有限,而使用pandas來處理資料量巨大的csv檔案就容易的多了。import pandas as pd deftest...

pandas高階 DataFrame高階操作

我想這篇部落格內容可能比較散,因為我沒有任何思路,可能想到 寫到 工作中用到什麼功能寫什麼功能。1.drop duplicates drop duplicates 的作用是刪除重複行,首先,有這麼乙個dataframe df.drop duplicates 後的結果 drop duplicates ...