來源:Python數據之道 (ID:PyDataLab)
作者:陽哥
大家好,我是陽哥。
Pandas 可以說是 在Python數據科學領域應用最為廣泛的工具之一。
Pandas是一種高效的數據處理庫,它以 dataframe 和 series 為基本數據類型,呈現出類似excel的二維數據。
在數據處理過程中,咱們經常會用到數據篩選,Pandas 中提供了數據篩選的多種方法,這裡,陽哥來給大家分享下 在Pandas中應用 query 函數來進行數據篩選。
query 函數的一般用法如下:
df.query('expression')文中的代碼是在 Jupyter Notebook 中運行的(也可以是其他IDE),本次使用的 Pandas 版本是 1.3.0 版,如下:
import pandas as pd
print(f'pandas version: {pd.__version__}')
# pandas version: 1.3.0rc1在開始之前,先創建一份數據,供後續使用:
data = {
'brand':['Python數據之道','價值前瞻','菜鳥數據之道','Python','Java'],
'A':[10,2,5,20,16],
'B':[4,6,8,12,10],
'C':[8,12,18,8,2],
'D':[6,18,14,6,12],
'till years':[4,1,1,30,30]
}
df = pd.DataFrame(data=data)
df數據如下:
常用方法篩選 "brand" 列中值為 "Python數據之道" 的行,如下:
df.query('brand == "Python數據之道"')結果如下:
說明一下,上面代碼中的單引號和雙引號是可以互換的,下面的寫法,其結果也是一樣的:
df.query(" brand == 'Python數據之道' ")上面用 query 函數篩選數據,用下面的方法也是可以實現的:
df[df['brand']=="Python數據之道"]上面是篩選字符串的值,也可以是篩選數字,如下:
通過數學表達式篩選除了直接通過等於某個值來篩選, query 函數還支持通過數學表達式來進行數據篩選,包括 >、 <、 +、 -、 *、 / 等。
示例如下:
通過變量篩選在程序比較長的時候,經常會使用變量來作為篩選條件, query 函數在使用變量作為判斷標準時,通過在變量前面添加 @ 符號來實現,示例如下:
# 通過變量來篩選數據,在變量前使用 @ 符號即可
name = 'Python數據之道'
df.query('brand == @name')
列表數據篩選當需要在某列中篩選多個符合要求的值的時候,可以通過列表(list)來實現,示例如下:
# 需要注意下 雙引號 和 單引號的分開使用
df.query('brand in ["Python數據之道","價值前瞻"]')
# df.query("brand in ['Python數據之道','價值前瞻']")
多條件篩選有很多情況下,咱們需要通過多個條件來篩選數據,query 函數支持多種條件的組合,
兩者都需要滿足的並列條件使用符號 &,或 單詞 and只需要滿足其中之一的條件使用符號 |,或 單詞 or示例如下:
列名稱有空格的情況當 dataframe 的列名稱中有空格或其他特殊符號的時候,需要使用 反引號(backtick mark),即鍵盤ESC鍵下面的按鍵(就是鍵盤上第二排第一個按鍵,有『~』這個符號的按鍵) 來將列名包裹起來,示例如下:
df.query("`till years` < 5")注意,如果使用單引號,將會報錯,如下:
篩選後選取數據列在數據篩選後,還可以選擇需要的數據列,如下:
小結以上就是關於 Pandas 中 query 函數的主要內容介紹,應用 query函數進行數據篩選,其語言還是比較簡潔的,尤其是當條件比較多的時候,會顯得更優雅。
比如下面的對比,假設都是三個篩選條件(假設數據量較多,符合的結果也較多):
沒有使用query函數時
df[(df['brand']=="Python數據之道") & (df['A'] >2) & (df['C'] >4)]可以看出上面的表達式是比較長的,略顯繁瑣。
使用query函數時
df.query(" brand == 'Python數據之道' & A>2 & C>4 ")相對來說,使用query 函數會顯得更加簡潔,如果覺得這個功能不錯,就趕緊用起來吧~~
大家讀完順手點下右下角的 「在看」 ,就是最大的鼓勵和支持了。