當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python Pandas DataFrame query方法用法及代碼示例

Pandas 的 DataFrame.query(~) 方法根據提供的布爾表達式過濾行。

注意

query(~) 方法返回數據的副本,因此您無法使用該方法更新 DataFrame 的值。要執行更新,請使用 loc iloc 等屬性,它們返回引用而不是副本。

參數

1. expr | string

過濾行的條件。該字符串必須是布爾表達式(例如"A == 2""A > 3",其中A 是列名稱)。

2. inplace | boolean | optional

  • 如果是True,那麽該方法將直接修改源DataFrame,而不是創建新的DataFrame。

  • 如果是False,則將創建並返回一個新的DataFrame。

默認情況下,inplace=False

返回值

包含已過濾行的DataFrame

例子

考慮以下 DataFrame :

import pandas as pd
df = pd.DataFrame({"A":[1,2,3], "B":[4,5,6], "C":[7,8,9]})
df



   A  B  C
0  1  4  7
1  2  5  8
2  3  6  9

平等查詢

要獲取列 A 的值為 2 的所有行:

df.query("A == 2")



   A  B  C
1  2  5  8

對於not-equals 查詢,請改用!=

帶有字符串值的查詢

當引用string-typed值時,將它們包裝在'"中,如下所示:

df = pd.DataFrame({"A":["a","b"]})
df.query("A == 'a'")



   A
0  a

帶有布爾值的查詢

通過布爾值查詢:

df = pd.DataFrame({"A":[True,False]})
df.query("A == True")



   A
0  True

範圍查詢

要獲取列 A 的值大於 1 的所有行:

df.query("A > 1")



   A  B  C
1  2  5  8
2  3  6  9

區間查詢

要獲取列 A 的值介於 1 和 3 之間(兩端都不包括)的所有行:

df.query("1 < A < 3")



   A  B  C
1  2  5  8

AND 查詢

要獲取列 A == 3 和列 C == 9 的所有行:

df.query("A == 3 and C == 9")



   A  B  C
2  3  6  9

或查詢

要獲取列 A == 1 或列 C == 9 的所有行:

df.query("A == 1 or C == 9") 



   A  B  C
0  1  4  7
2  3  6  9

使用 column-comparisons 進行查詢

要獲取列 C 的值大於列 A 的所有行:

df.query("C > A")



   A  B  C
0  1  4  7
1  2  5  8
2  3  6  9

帶有算術運算的查詢

要獲取 C 的值加 1 為 10 的所有行:

df.query("C + 1 == 10")



   A  B  C
2  3  6  9

具有對象訪問權限的查詢

您還可以使用點符號訪問對象屬性和方法:

df.query("B.values.max() < C")



   A  B  C
0  1  4  7
1  2  5  8
2  3  6  9

在此,請注意以下事項:

  • B 的類型為 Series ,因此您可以訪問 Series 可用的所有屬性和方法。

  • 其中一個屬性是 values ,它隻是 SeriesNumpy array 表示。

  • 接下來,我們調用 max() ,這是所有 Numpy 數組都可用的方法。在本例中, max() 返回 6,因為 6B 列中的最大值。

IN 查詢

考慮以下 DataFrame :

df = pd.DataFrame({"A":["aa","aa","aA","AA"],"B":["b","b","b","b"]})
df



   A   B
0  aa  b
1  aa  b
2  aA  b
3  AA  b

要獲取 A 的值位於 arr 中的所有行:

arr = ["aa","AA"]
df.query("A in @arr")



   A   B
0  aa  b
1  aa  b
3  AA  b

這裏,arr 帶有 @ 前綴,因為它是外部變量。

不在查詢中

考慮相同的 DataFrame:

df = pd.DataFrame({"A":["aa","aa","aA","AA"],"B":["b","b","b","b"]})
df



   A   B
0  aa  b
1  aa  b
2  aA  b
3  AA  b

要獲取 A 的值不在 arr 中的所有行:

arr = ["aa","AA"]
df.query("A not in @arr")



   A   B
2  aA  b

參考索引

考慮以下 DataFrame :

df = pd.DataFrame({"A":[2,3,4],"B":[5,6,7]})
df



   A  B
0  2  5
1  3  6
2  4  7

要引用索引,隻需包含單詞index,如下所示:

df.query("index > 1")



   A  B
2  4  7

處理帶空格的列名

當列名包含空格時,您需要在列名周圍添加back-ticks `

考慮以下 DataFrame :

df = pd.DataFrame({"A A":[1,2],"B":[3,4]})
df



   A A  B
0   1   3
1   2   4

在這裏,第一列(即 A A )的名稱中包含空格。為了解決這個問題,請像下麵這樣包裝`

df.query("`A A` == 2")



   A A  B
1   2   4

相關用法


注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | query method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。