Pandas DataFrame DataFrame.query() 函式

Suraj Joshi 2023年1月30日 2020年6月17日
  1. pandas.DataFrame.query() 語法
  2. 示例程式碼:DataFrame.query() 方法帶單一條件
  3. 示例程式碼:當列名有空格時的 DataFrame.query() 方法
  4. 示例程式碼:DataFrame.query() 方法有多個條件
Pandas DataFrame DataFrame.query() 函式

pandas.DataFrame.query() 方法使用給定的查詢表示式過濾呼叫者 DataFrame 的行。

pandas.DataFrame.query() 語法

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

引數

expr 基於過濾行的查詢表示式
inplace 布林型。如果為 True,就地修改呼叫者 DataFrame 資料
**kwargs 方法關鍵字引數

返回值

如果 inplaceTrue,則返回過濾後的 DataFrame;否則為 None

示例程式碼:DataFrame.query() 方法帶單一條件

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame:")
print(df)

filtered_df=df.query('X>1')
print("Filtered DataFrame:")
print(filtered_df)

輸出:

Original DataFrame:
   X  Y
0  1  4
1  2  1
2  3  8
Filtered DataFrame:
   X  Y
1  2  1
2  3  8

它返回 DataFrame,其中只有滿足給定查詢表示式的行,即只有列 X 的值大於 1 的行。

示例程式碼:當列名有空格時的 DataFrame.query() 方法

在將此方法應用於 DataFrame 之前,我們必須確保要查詢的列名中沒有任何空格。

如果我們的列名中有空格,我們可以使用反勾引號(`)。

import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8],
                    'A B':[3,5,7]})
print("Original DataFrame:")
print(df)
filtered_df=df.query('`A B`>5')
print("Filtered DataFrame:")
print(filtered_df)

輸出:

Original DataFrame:
   X  Y  A B
0  1  4    3
1  2  1    5
2  3  8    7
Filtered DataFrame:
   X  Y  A B
2  3  8    7

這裡,列名 A B 有空格。要對該列進行查詢表示式,我們將列名用反引號括起來,否則會出現錯誤。

示例程式碼:DataFrame.query() 方法有多個條件

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
print("Original DataFrame:")
print(df)

filtered_df=df.query('X>1' and 'Y==1')
print("Filtered DataFrame:")
print(filtered_df)

輸出:

Original DataFrame:
   X  Y
0  1  4
1  2  1
2  3  8
Filtered DataFrame:
   X  Y
1  2  1

如果我們希望根據多個條件過濾 DataFrame,我們使用 and 操作符將多個查詢表示式組合成一個複合查詢表示式。

它給出的 DataFrame 中,列 X 的值大於 1,列 Y 的值等於 1 的行。

我們可以在呼叫 query() 方法後,通過設定 inplace=True 來修改原來的 DataFrame

import pandas as pd
df = pd.DataFrame({'X': [1, 2, 3,],
                   'Y': [4, 1, 8]})
filtered_df=df.query('X>1' and 'Y==1',inplace=True)
print(df)

輸出:

   X  Y
1  2  1
Author: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

相關文章 - Pandas DataFrame