zoukankan      html  css  js  c++  java
  • 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.filter

    pd.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方法教你优雅的查询

  • 相关阅读:
    STP生成树协议
    Fiddler快速入门(还有一个功能就是不经过网络,直接模拟一个响应返回给客户端)
    Qt宏Q_OBJECT展开记录
    rem_taobaofix.js
    yield return
    NET full stack framework
    API 网关
    Redis主从高可用缓存
    数据异构解决方案缓存一致性和跨服务器查询
    NET Core 防止跨站请求
  • 原文地址:https://www.cnblogs.com/hider/p/15493063.html
Copyright © 2011-2022 走看看