Python学习笔记:pd.filter、query筛选数据 |
您所在的位置:网站首页 › filter函数过滤多个条件 › Python学习笔记:pd.filter、query筛选数据 |
一、pd.filter函数
1.介绍
pd.filter 函数根据指定的索引标签对数据框行、或列进行数据筛选(子集查询)。 使用语法为: DataFrame.filter(items=None, like=None, -- str regex=None, -- str axis=None)类似于 df.loc、df.iloc 函数所实现的功能。 参数说明: items -- 对列进行筛选 轴标签列表 regex -- 正则匹配 like -- 进行筛选 模糊名查询 axis=0 -- 按行 axis=1 -- 按列注意:仅按照标签筛选,不对数据内容进行过滤! 2.pd.filter # 构建测试集 import pandas as pd import numpy as np df = pd.DataFrame(np.array(([1,2,3],[4,5,6])), index=['mouse','rabbit'], columns=['one','two','three']) # 过滤列 df.filter(items=['one','three']) df.filter(['one']) # 正则 df.filter(regex='e$', axis=1) # 以e结尾 df.filter(regex='e$', axis=0) df.filter(regex='Q') # 包含Q # 相似 df.filter(like='bb', axis=0) # 按行 # 轴标签 df.filter(['one','two'], axis=1) # 混合使用 df.filter(regex='^r', axis=0).filter(like='o', axis=1) # r开头的行 包含o的列注意:其中的参数 items/like/regex 被强制执行为相互排斥,只能有一个存在。 3.pd.Series.filterpd.Series 应用 filter 时参数与 df.filter 一样,不过由于 Series 只有一个轴,不能将 axis = 1,只能按索引查询数据。 df.one.filter(['rabbit']) df.one.filter(like='e') df.one.filter(regex='e$') 4.DataFrameGroupBy.filter分组后进行筛选,可以自定义函数,常与匿名函数 lambda 结合使用。 类似于 SQL 中的 groupby + having 操作。 使用语法为: DataFrameGroupBy.filter(func, dropna=True, *args, **kwargs) func -- 用于每个分组 dropna -- 是否删除实操: # 构建测试集 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.groupby('A').filter(lambda x:x['B'].mean() > 3.) # 长度 df.groupby('team').filter(lambda x: len(x) >= 3) # 只要有一个满足 df.groupby(['A']).filter(lambda x: (x['B'] > 3).any()) # 全部满足 df.groupby('A').filter(lambda x: (x.mean() >= 4).all()) # 和满足 df.groupby('A').filter(lambda x: x.Q1.sum() >100) 二、pd.query函数 1.介绍使用布尔表达式查询 DataFrame 的列,按照某列规则进行过滤。 类似于 SQL 中的 where 进行条件过滤。 使用语法为: DataFrame.query(expr, inplace=False, **kwargs) expr -- 查询字符串 inplace -- 是否修改原数据框 2.实操 import pandas as pd import numpy as np df = pd.DataFrame({'A':range(1,6), 'B':range(10,0,-2), 'C':2}) df ''' A B C 0 1 10 2 1 2 8 2 2 3 6 2 3 4 4 2 4 5 2 2 ''' df.query('B == 2') # B列等于2 df.query('A < B') # A列小于B列 df[df.A < df.B] # 同上 # 多条件查询 df.query('A < B & A < C') df.query('A < B | A == 4') # 部分样例 df.query('A > B > C') df.query('A + B > 100') df.query('A == B') df.query('A != 100') df.query('A in [3,5]') df.query('A not in [3,5]') df.query('name.str.contains("r")') # 好像不支持 df.name.str.contains("r") # 测试没问题 df.query('B == `team name`') # 有空格 反引号注意:查询条件必须为字符串。 参考链接:pandas filter 筛选标签 参考链接:pandas.DataFrame.filter 参考链接:pandas filter 筛选标签 参考链接:Pandas过滤-filter函数,query函数的使用 参考链接:Pandas - 查询函数query 参考链接:Pandas高级:query方法教你优雅的查询 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |