Pandas 的 filter 方法根據指定的索引標籤對數據框行或列查詢子集。它支持 DataFrame、Series 和 分組對象 DataFrameGroupBy 來使用。
公號作者的新書上市啦!
DataFrame語法DataFrame 使用時的語法為:
df.filter( items=None, like: 'str | None' = None, regex: 'str | None' = None, axis=None,) -> 'FrameOrSeries'
參數:
items:list-like,對應軸的標籤名列表
like:str,支持對應標籤名的模糊名查詢
regex:str (正則表達式),按正則表達式查詢標籤名
axis:{0 or 『index』, 1 or 『columns』, None}, default None,要篩選的軸,表示為索引(int)或軸名稱(str)。默認情況下為列名,『index』 為 Series, 『columns』 為 DataFrame
返回:
用法需要注意的是,此方法不會對數據幀的數據內容進行過濾,僅應用於按標籤篩選。
其中的參數 items, like, 和 regex parameters 被強制執行為相互排斥,即只能有一個存在。軸默認為使用 [] 索引時使用的信息軸(info axis,按行)。
案例df = pd.DataFrame(np.array(([1, 2, 3], [4, 5, 6])), index=['mouse', 'rabbit'], columns=['one', 'two', 'three'])df''' one two threemouse 1 2 3rabbit 4 5 6'''df.filter(items=['one', 'three'])''' one threemouse 1 3rabbit 4 6'''df.filter(regex='e$', axis=1)''' one threemouse 1 3rabbit 4 6'''df.filter(like='bbi', axis=0)''' one two threerabbit 4 5 6'''
更多代碼示例:
df.filter(items=['Q1', 'Q2']) df.filter(regex='Q', axis=1) df.filter(regex='e$', axis=1) df.filter(regex='1$', axis=0) df.filter(like='2', axis=0) df.filter(regex='^2', axis=0).filter(like='Q', axis=1)SeriesSeries 應用 filter 時參數與 df.filter 一樣,不過由於 Series 只有一個軸,不能將 axis = 1,只能按索引查詢數據。以下為示例:
df.one.filter(['mouse'])df.one.filter(like='se')df.one.filter(regex='e$')'''mouse 1Name: one, dtype: int64'''DataFrameGroupBy
分組對象的使用上,它可以返回不包含篩選元素的數據框的副本。如果組中的元素不滿足函數指定的布爾表達式(為 False),則會將其篩選過濾掉。filter 的函數 func 經常和匿名函數 lambda 配合使用,用來篩選 groupby 之後的數據,它類似 SQL 中 groupby 後的 having 操作。
語法它的使用語法為:
DataFrameGroupBy.filter(func, dropna=True, *args, **kwargs)參數:
返回:
註:每個子幀都被賦予 「name」 屬性,以防您需要知道正在處理哪個組。變異傳遞對象的函數可能會產生意外行為或錯誤,因此不支持。
使用案例以下展示了一個分組篩選的示例:
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar'], 'B' : [1, 2, 3, 4, 5, 6], 'C' : [2.0, 5., 8., 1., 2., 9.]})
df''' A B C0 foo 1 2.01 bar 2 5.02 foo 3 8.03 bar 4 1.04 foo 5 2.05 bar 6 9.0'''grouped = df.groupby('A')grouped.filter(lambda x: x['B'].mean() > 3.)''' A B C1 bar 2 5.03 bar 4 1.05 bar 6 9.0'''結果是,篩選所在組組B列平均值大於3的所有數據。
其他代碼示例:
df.groupby('team').filter(lambda x: len(x) >= 3)df.groupby(['team']).filter(lambda x: (x['Q1'] > 97).any())df.groupby(['team']).filter(lambda x: (x.mean() >= 60).all())df.groupby('team').filter(lambda g: g.Q1.sum() > 1060)支持對象總結一下,可以調用 apply() 的對象還有以下對象有:
公號作者的新書上市啦!歡迎購買 ⬇️
(完)
點擊「閱讀原文」查看【Pandas 教程】
https://www.gairuo.com/p/pandas-tutorial
..
更多信息請訪問
www.gairuo.com
未經蓋若授權,請勿轉載