前言:Pandas的數據操作中,最基本的就是操作的篩選了,但是對新學員來說的這又是一個難點,因為方法比較多,不容易記。在此總結一下pandas中的一些常用的數據篩選操作。
邏輯篩選數據:切片([ ]),loc,iloc,這三種都是支持邏輯表達式的,選其中一種比較常用的,邏輯運算符 與或非(& | ~)any,all
展示使用的數據結構:
import pandas as pd
PATH = '/tmp/MSD0921.xlsx'
dataframe = pd.read_excel(PATH,engine='openpyxl', nrows=50)
1、篩選出某一列大于某一個數的所有數據,例如:SD1>=7
"""篩選出SD1列中大于等于7的數據"""
dataframe[dataframe['SD1'] >= 7]
2、篩選出某一列大于或者小于另一列的輸有數據,例如:SD1 < SD2
"""篩選出SD1列小于SD2列所有數據"""
dataframe.loc[dataframe['SD1'] < dataframe['SD2']]
3、篩選出某些列的值大于或小于某些值的所有數據,例如:SD1 >6并且SD1<3,使用 &
"""篩選出SD1大于6,并且SD2小于3的所有數據"""
dataframe.loc[(dataframe['SD1'] > 6) & ( dataframe['SD2'] < 3)]
4、篩選出某些列的值大于或小于某些值的所有數據,例如:SD1 >6或者SD1<3,使用 |
"""篩選出SD1小于6,或者SD2小于3的所有數據,并集"""
dataframe.loc[(dataframe['SD1'] > 6) | ( dataframe['SD2'] < 3)]
注意:需要注意的是在進行或(|)、與(&)、非(~)運算時,各個獨立邏輯表達式需要用括號括起來
除了上邊的與或之外,pandas還提供了 all,any,對邏輯計算后的布爾值在進行判斷,所有都為True,all才返回True,反之亦然,any滿足其中之一即可。all,any可傳參數axis,1為行方向,0為列方向。利用此方法可對整體數據邏輯判斷。
5、篩選出某些列的值同時大于或同時小于某值的所有數據,例如SD1>6 SD2>6
"""篩選出SD1, SD2同時大于6的所有數據"""
dataframe[(dataframe.loc[:,['SD1', 'SD2']] > 6).all(1)]
邏輯解讀: dataframe.loc[:,['SD1', 'SD2']] > 6,這個邏輯計算的是SD1,SD2同時大于6返回的布爾值,逗號前的冒號表示所有行,返回的是False或者True的一個dataframe數據,整體在進行.all(1),操作返回的是SD1,SD2都為True的為True,否者為False所有行數。在使用切片 [ ],進行取數據。