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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。