Pandas 的 DataFrame.query(~) 方法根據提供的布爾表達式過濾行。
參數
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,它隻是Series的Numpy array表示。 -
接下來,我們調用
max(),這是所有 Numpy 數組都可用的方法。在本例中,max()返回6,因為6是B列中的最大值。
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
相關用法
- Python Pandas DataFrame quantile方法用法及代碼示例
- Python Pandas DataFrame empty屬性用法及代碼示例
- Python Pandas DataFrame pop方法用法及代碼示例
- Python Pandas DataFrame nsmallest方法用法及代碼示例
- Python Pandas DataFrame sample方法用法及代碼示例
- Python Pandas DataFrame items方法用法及代碼示例
- Python Pandas DataFrame max方法用法及代碼示例
- Python Pandas DataFrame swaplevel方法用法及代碼示例
- Python Pandas DataFrame agg方法用法及代碼示例
- Python Pandas DataFrame copy方法用法及代碼示例
- Python Pandas DataFrame pow方法用法及代碼示例
- Python Pandas DataFrame insert方法用法及代碼示例
- Python Pandas DataFrame lt方法用法及代碼示例
- Python Pandas DataFrame all方法用法及代碼示例
- Python Pandas DataFrame unstack方法用法及代碼示例
- Python Pandas DataFrame mean方法用法及代碼示例
- Python PySpark DataFrame filter方法用法及代碼示例
- Python Pandas DataFrame tz_convert方法用法及代碼示例
- Python Pandas DataFrame isin方法用法及代碼示例
- Python PySpark DataFrame collect方法用法及代碼示例
- Python PySpark DataFrame intersect方法用法及代碼示例
- Python PySpark DataFrame dtypes屬性用法及代碼示例
- Python Pandas DataFrame rank方法用法及代碼示例
- Python Pandas DataFrame tail方法用法及代碼示例
- Python Pandas DataFrame transform方法用法及代碼示例
注:本文由純淨天空篩選整理自Isshin Inada大神的英文原創作品 Pandas DataFrame | query method。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
