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


Python pandas.DataFrame.query用法及代碼示例

用法:

DataFrame.query(expr, inplace=False, **kwargs)

使用布爾表達式查詢 DataFrame 的列。

參數

exprstr

要評估的查詢字符串。

您可以通過在變量前麵加上“@”字符來引用環境中的變量,例如 @a + b

您可以通過將它們括在反引號中來引用不是有效 Python 變量名的列名。因此,包含空格或標點符號(下劃線除外)或以數字開頭的列名必須用反引號括起來。 (例如,名為“麵積 (cm^2)”的列將被引用為 `Area (cm^2)` )。不能使用作為 Python 關鍵字的列名(如 “list”, “for”, “import” 等)。

例如,如果您的一列稱為 a a 並且您想將其與 b 相加,則您的查詢應該是 `a a` + b

inplacebool

查詢是否應就地修改數據或返回修改後的副本。

**kwargs

有關 DataFrame.query() 接受的關鍵字參數的完整詳細信息,請參閱 eval() 的文檔。

返回

DataFrame 或無

DataFrame 由提供的查詢表達式產生,如果 inplace=True 則為 None。

注意

該表達式的評估結果首先傳遞給DataFrame.loc,如果由於多維鍵(例如DataFrame)而失敗,則結果將傳遞給DataFrame.__getitem__()

此方法使用頂級 eval() 函數來評估傳遞的查詢。

pandas.DataFrame.query方法默認使用稍微修改的 Python 語法。例如,&|(按位)運算符具有其布爾表兄弟的優先級,andor.這語法上有效的 Python,但語義不同。

您可以通過傳遞關鍵字參數 parser='python' 來更改表達式的語義。這強製執行與 Python 空間中的求值相同的語義。同樣,您可以傳遞 engine='python' 以使用 Python 本身作為後端來評估表達式。不建議這樣做,因為與使用numexpr 作為引擎相比效率低下。

DataFrame 實例的DataFrame.indexDataFrame.columns 屬性默認放置在查詢命名空間中,這允許您將框架的索引和列都視為框架中的列。標識符index用於幀索引;您還可以使用索引的名稱在查詢中識別它。請注意,Python 關鍵字不能用作標識符。

有關更多詳細信息和示例,請參閱索引中的query 文檔。

反引號引用的變量

反引號引用的變量被解析為文字 Python 代碼,並在內部轉換為 Python 有效標識符。這會導致以下問題。

在解析反引號引號字符串中的一些不允許的字符時,將替換為允許作為 Python 標識符的字符串。這些字符包括 Python 中的所有運算符、空格字符、問號、感歎號、美元符號和歐元符號。對於超出 ASCII 範圍 (U+0001..U+007F) 的其他字符以及 PEP 3131 中未進一步指定的字符,查詢解析器將引發錯誤。這不包括不同於空格字符的空格,還包括主題標簽(因為它用於評論)和反引號本身(反引號也不能被轉義)。

在特殊情況下,在反引號周圍形成一對的引號會使解析器感到困惑。例如,`it's` > `that's` 會引發錯誤,因為它會形成一個帶引號的字符串 ('s > `that'),其中包含一個反引號。

另請參閱有關詞法分析的 Python 文檔 (https://docs.python.org/3/reference/lexical_analysis.html) 以及 pandas.core.computation.parsing 中的源代碼。

例子

>>> df = pd.DataFrame({'A': range(1, 6),
...                    'B': range(10, 0, -2),
...                    'C C': range(10, 5, -1)})
>>> 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
>>> df.query('A > B')
   A  B  C C
4  5  2    6

前麵的表達式等價於

>>> df[df.A > df.B]
   A  B  C C
4  5  2    6

對於名稱中帶有空格的列,您可以使用反引號。

>>> df.query('B == `C C`')
   A   B  C C
0  1  10   10

前麵的表達式等價於

>>> df[df.B == df['C C']]
   A   B  C C
0  1  10   10

相關用法


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