首页 > 其他分享 >pandas filter() 筛选标签

pandas filter() 筛选标签

时间:2022-12-18 15:11:06浏览次数:41  
标签:regex bar df 标签 filter 筛选 pandas axis

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  three
mouse     1    2      3
rabbit    4    5      6
'''

 


# 按名称选择列
df.filter(items=['one', 'three'])
'''
         one  three
mouse     1      3
rabbit    4      6
'''

# 按正则表达式选择列
df.filter(regex='e$', axis=1)
'''
         one  three
mouse     1      3
rabbit    4      6
'''

 


# 选择包含“bbi”的行
df.filter(like='bbi', axis=0)
'''
         one  two  three
rabbit    4    5      6
'''

 

更多代码示例:

df.filter(items=['Q1', 'Q2']) # 选择两列
df.filter(regex='Q', axis=1) # 列名包含Q的
df.filter(regex='e$', axis=1) # 以 e 结尾的
df.filter(regex='1$', axis=0) # 正则, 索引名包含1的
df.filter(like='2', axis=0) # 索引中有2的
# 索引中2开头列名有Q的
df.filter(regex='^2', axis=0).filter(like='Q', axis=1)

 

Series

Series 应用 filter 时参数与 df.filter 一样,不过由于 Series 只有一个轴,不能将 axis = 1,只能按索引查询数据。以下为示例:

# 以下代码得到同样的结果
df.one.filter(['mouse'])
df.one.filter(like='se')
df.one.filter(regex='e$')
'''
mouse    1
Name: one, dtype: int64
'''

 

DataFrameGroupBy

分组对象的使用上,它可以返回不包含筛选元素的数据框的副本。如果组中的元素不满足函数指定的布尔表达式(为 False),则会将其筛选过滤掉。filter 的函数 func 经常和匿名函数 lambda 配合使用,用来筛选 groupby 之后的数据,它类似 SQL 中 groupby 后的 having 操作。

语法

它的使用语法为:

DataFrameGroupBy.filter(func, dropna=True,
                        *args, **kwargs)

参数:

  • func:函数,函数应用于每个分组的子帧,应该返回 True 或 False。
  • dropna:删除未通过筛选器的组。默认为 True,如果为 False,则评估为 False 的组将填充 NaN
  • *args, **kwargs:func 的参数

返回:

  • 通过筛选操作后的 DataFrame

注:每个子帧都被赋予 “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    C
0  foo  1  2.0
1  bar  2  5.0
2  foo  3  8.0
3  bar  4  1.0
4  foo  5  2.0
5  bar  6  9.0
'''
# 分组
grouped = df.groupby('A')
# 分组筛选,筛选所在组组B列平均值大于3的所有数据
grouped.filter(lambda x: x['B'].mean() > 3.)
'''

 


     A  B    C
1  bar  2  5.0
3  bar  4  1.0
5  bar  6  9.0
'''

结果是,筛选所在组组B列平均值大于3的所有数据。

其他代码示例:

# 值的长度都大于等于 3 的
df.groupby('team').filter(lambda x: len(x) >= 3)
# Q1成绩只要有一个大于97的组
df.groupby(['team']).filter(lambda x: (x['Q1'] > 97).any())
# 所有成员平均成绩大于 60 的组
df.groupby(['team']).filter(lambda x: (x.mean() >= 60).all())
# Q1 所有成员成绩之和超过 1060 的组
df.groupby('team').filter(lambda g: g.Q1.sum() > 1060)

 

支持对象

总结一下,可以调用 apply() 的对象还有以下对象有:

  • pandas.DataFrame.filter
  • pandas.Series.filter
  • pandas.core.groupby.DataFrameGroupBy.filter

标签:regex,bar,df,标签,filter,筛选,pandas,axis
From: https://www.cnblogs.com/a00ium/p/16990408.html

相关文章

  • JSTL-常用标签-if、choose、foreach
    JSTL-常用标签-ifif:相当于java代码的if语句1.属性:test必须属性,接受boolean表达式如果表达式为true,则显示if标签体内容,如果为false,则不显示标签......
  • 超级好看的 Edge 浏览器新标签页插件:好用、好看、免费浏览器必备
    BdTab新标签页BdTab新标签页扩展是一款免费无广告、简单好用的的高颜值新标签页扩展。BdTab它颜值高、简单好用、支持高度自定义:在登录之后支持云备份,支持快速切换搜索引擎......
  • 超级好看的 Edge 浏览器新标签页插件:好用、好看、免费浏览器必备
    BdTab新标签页BdTab新标签页扩展是一款免费无广告、简单好用的的高颜值新标签页扩展。BdTab它颜值高、简单好用、支持高度自定义:在登录之后支持云备份,支持快速切换搜......
  • 品优购项目-项目,背景,设计,文件夹,ico图标,网站优化三大标签,字体icomoon等介绍
    品优购项目(一)目标:能会引入ico图标能简单看懂网站优化的三大标签能使用字体图标(重点)能说出我们css属性书写顺序能课堂跟上pink老师的节奏完成品优购项目1.......
  • HTML的基本标签
    HTML的基本标签(1)HTML标签整个网页是从<html>这里开始的,然后到</html>结束。(2)head标签head标签代表页面的“头”,定义一些特殊内容,这些内容往往都是“不可见内容”(在浏......
  • YoloV7 标签匹配机 loss 计算详解
    这是一篇v7后处理详解的文章本篇文章主要对YoloV7的后处理进行详细讲解,YoloV7除了结构上,对前后处理都进行了改进,其余包括scheduler、optimizer等与YoloV6都是保......
  • ECMall2.x模板制作入门系列之(模板标签/语法)
    在ECMall模板中,用”{“开头,以”}”结尾就构成一个标签单元,”{“紧接着的单词就是标签名。在标签单元中单词前含”$”(美元符)的为变量名。一、资源引用res标签功能:返回当......
  • 机器学习之pandas读取csv文件到指定行停止,不再读取后面的值
    1.关于这个读取csv文件到指定行,目前想了两个方法。1.直接withopen文件一行一行读,读到我们所需要的行返回。但是如果这个文件又需要用pandas处理,就会显得很麻烦,造成......
  • jsp标签
    jsp标签1jsp标签的作用​jsp标签作用:替换jsp脚本。1)流程判断(if for循环)2)跳转页面(转发,重定向)3)。。。。。2Jsp标签分类1)内置标签(动作标签):不需要在jsp页......
  • 数据分析之pandas的使用
    pandas为什么学习pandasnumpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢?numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数......