当前位置:首页 > 谈天说地 > 正文内容

Pandas使用query()优雅的查询实例

34资源网2022年01月24日 21:07383
目录
  • 常规用法
  • 多条件查询
  • 引用变量
  • 索引选取
    • 多索引选取
  • 特殊字符

    对于 pandas 根据条件获取指定数据,相信大家都能够轻松的写出相应代码,但是如果你还没用过 query,相信你会被它的简洁所折服!

    常规用法

    先创建一个 dataframe。

    import pandas as pd
    
    df = pd.dataframe(
        {'a': ['e', 'd', 'c', 'b', 'a'],
         'b': ['f', 'b', 'c', 'd', 'e'],
         'c': range(0, 10, 2),
         'd': range(10, 0, -2),
         'e.e': range(10, 5, -1)})

    我们现在选取 a列字母出现在b列 的所有行。先看两种常见写法。

    >>> df[df['a'].isin(df['b'])]
       a  b  c   d  e.e
    0  e  f  0  10   10
    1  d  b  2   8    9
    2  c  c  4   6    8
    3  b  d  6   4    7
    >>> df.loc[df['a'].isin(df['b'])]
       a  b  c   d  e.e
    0  e  f  0  10   10
    1  d  b  2   8    9
    2  c  c  4   6    8
    3  b  d  6   4    7

    下面使用 query() 来实现。

    >>> df.query("a in b")
       a  b  c   d  e.e
    0  e  f  0  10   10
    1  d  b  2   8    9
    2  c  c  4   6    8
    3  b  d  6   4    7

    可以看到使用 query 后的代码简洁易懂,并且它对于内存的消耗也更小。

    多条件查询

    选取 a列字母出现在b列,并且c列小于d列 的所有行。

    >>> df.query('a in b and c < d')
       a  b  c   d  e.e
    0  e  f  0  10   10
    1  d  b  2   8    9
    2  c  c  4   6    8

    这里 and 也可以用 & 表示。

    引用变量

    表达式中也可以使用外部定义的变量,在变量名前用@标明。

    >>> number = 5
    >>> df.query('a in b & c > @number')
       a  b  c  d  e.e
    3  b  d  6  4    7

    索引选取

    选取 a列字母出现在b列,并且索引大于2 的所有行。

    >>> df.query('a in b and index > 2')
       a  b  c  d  e.e
    3  b  d  6  4    7

    多索引选取

    创建一个两层索引的 dataframe。

    >>> import numpy as np
    >>> colors = ['yellow']*3 + ['red']*2
    >>> rank = [str(i) for i in range(5)]
    >>> index = pd.multiindex.from_arrays([colors, rank], names=['color', 'rank'])
    >>> df = pd.dataframe(np.arange(10).reshape(5, 2),columns=['a', 'b'] , index=index)
    >>> df = pd.dataframe(np.arange(10).reshape(5, 2),columns=['a', 'b'] , index=index)
    >>> df
                 a  b
    color  rank      
    yellow 0     0  1
           1     2  3
           2     4  5
    red    3     6  7
           4     8  9

    1.当有多层索引有名称时,通过索引名称直接选取。

    >>> df.query("color == 'red'")
                a  b
    color rank      
    red   3     6  7
          4     8  9

    2.当有多层索引无名时,通过索引级别来选取。

    >>> df.index.names = [none, none]
    >>> df.query("ilevel_0 == 'red'")
           a  b
    red 3  6  7
        4  8  9
    >>> df.query("ilevel_1 == '4'")
           a  b
    red 4  8  9

    特殊字符

    对于列名中间有空格或运算符等其他特殊符号,需要使用反引号 ``。

    >>> df.query('a == b | (c + 2 > `e.e`)')
       a  b  c  d  e.e
    2  c  c  4  6    8
    3  b  d  6  4    7
    4  a  e  8  2    6

    总的来说,query() 用法比较简单,可以快速上手,代码可读性也提高了不少。

    到此这篇关于pandas使用query()优雅的查询实例的文章就介绍到这了,更多相关pandas query()查询内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

    看完文章,还可以用支付宝扫描下面的二维码领取一个支付宝红包,目前可领1-88元不等

    支付宝红包二维码

    除了扫码可以领取之外,大家还可以(复制 720087999 打开✔支付宝✔去搜索, h`o`n.g.包哪里来,动动手指就能领)。

    看下图所示是好多参与这次活动领取红包的朋友:

    支付宝红包

    扫描二维码推送至手机访问。

    版权声明:本文由34楼发布,如需转载请注明出处。

    本文链接:https://www.34l.com/post/6241.html

    分享给朋友:

    相关文章

    女人奋斗励志语录分享10句
    女人奋斗励志语录分享10句

    1、即便无人喝彩,也要守住自己的人生。每一次失败,都是成功的伏笔;每一次考验,都有一份收获;每一次泪水,都有一次醒悟;每一次磨难,都有生命的财富。每一次伤痛,都是成长的支柱。2、不要沮丧,不必惊慌,做努力爬的蜗牛或坚持飞的笨鸟,我们试着长大...

    分享30句用被刺造句的句子
    分享30句用被刺造句的句子

    1、黄昏已经谢去,夜幕早已铺开。高高的法国梧桐,被刺眼的白色路灯照亮。在黑色的夜空里镶了一圈又一圈攫绿,有时被拂过的夜风飘动,发出轻轻的沙沙声,只那么一阵,就消失在无限的宁静之中。2、一个人的羞耻心在基本一点上被刺痛,那么,它的余波会在不知...

    疫情还是很严峻,最近去超市都要检测了
    疫情还是很严峻,最近去超市都要检测了

    疫情还是很严峻,最近去超市也要各种检测了,记得前不久我去超市还是比较宽松的,基本上没有专门的检测员,口罩也不用戴。最近可能是外省一些地区疫情比较严重了,所以温州这边现在检测也更加严格了,我最近去超市买东西都要各种检测,买个菜呀,买些零食吃的...

    抖音传话筒项目(傻瓜式复制粘贴轻松月入3000+)
    抖音传话筒项目(傻瓜式复制粘贴轻松月入3000+)

    可能你觉得你写不出优秀的文案,可能你觉得你没办法配音,可能你觉得不好意思露脸,但又想通过抖音来赚钱,那么今天给大家来说说这个抖音传话筒项目,只需要复制粘贴,一个月轻松赚到3000+,无需露脸配音,更加不需要写文案。上图是我通过抖音搜索“传话...

    逍遥手机模拟器怎么用(逍遥安卓模拟器详细使用教程)
    逍遥手机模拟器怎么用(逍遥安卓模拟器详细使用教程)

    真正的5V5公平竞技对战,传承端游纯正体验。人气英雄,经典还原;公平竞技,实力至上;峡谷传说,掌心再现。策略、战术、意识、配合,在移动端重现峡谷战场乐趣。 为了庆祝大家期待已久的中国区开服,官方也带来了五大福利活动,用户可免费参与,并获...

    融资丨「PPIO边缘云」完成亿元A1轮融资,刷新边缘云领域融资记录
    融资丨「PPIO边缘云」完成亿元A1轮融资,刷新边缘云领域融资记录

    创业邦获悉,近日,边缘云公司PPIO宣布完成过亿元A1轮融资,由创世伙伴、张江科投、磐霖资本等多家机构联合投资,Pre-A轮投资方蓝驰创投、沸点资本及华业天成继续追加投资,光源资本担任融资财务顾问。这是公司半年内再次获投资人支持,公司A2...