当前位置:首页 > 谈天说地

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

34资源网2022-01-24514
目录
  • 常规用法
  • 多条件查询
  • 引用变量
  • 索引选取
    • 多索引选取
  • 特殊字符

    对于 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()查询内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

    看完文章,还可以扫描下面的二维码下载快手极速版领4元红包

    快手极速版二维码

    快手极速版新人见面礼

    除了扫码领红包之外,大家还可以在快手极速版做签到,看视频,做任务,参与抽奖,邀请好友赚钱)。

    邀请两个好友奖最高196元,如下图所示:

    快手极速版邀请好友奖励

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

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

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

    分享给朋友:

    相关文章

    华盛顿:自己不能胜任的事情,切莫轻易答应别人

    华盛顿:自己不能胜任的事情,切莫轻易答应别人

    自己不能胜任的事情,切莫轻易答应别人,一旦答应了别人,就必须实践自己的诺言。——华盛顿 这则名言告诉我们什么道理?我们应该怎么做?…

    络绎不绝怎么造句?教你用络绎不绝造句

    络绎不绝怎么造句?教你用络绎不绝造句

    很多人不知道络绎不绝怎么造句?其实用络绎不绝造句有很多的,下面小编整理了29句用络绎不绝造句的句子,希望对大家有借鉴的作用。…

    引流文案微信推广(微商引流推广文案模板)

    引流文案微信推广(微商引流推广文案模板)

    大家好啊!今天又跟大家分享小技巧啦~往下看↓↓↓ 首先说一下什么样的文案是引流型的?实际上,一句话是将公共域流量定向到您的私有域流量池。其目的是先引流然后慢慢进行信任激活变现。 在标题方面,通常有以下几种类型,今天为大家详细描述一下。 一…

    刘强东章泽天携手布局,“大厂”为何掀起私募热潮?

    刘强东章泽天携手布局,“大厂”为何掀起私募热潮?

    编者按:本文来自雷达财经(ID:leidacj),创业邦经授权发布。 作者|张凯旌 编辑|深海 京东在私募股权投资上又有新动作。 11月29日,由刘强东、章泽天、李瑞玉共同持股的海南三亚天博产业私募基金管理有限公司(下称“海南天博私…

    win7开始菜单设置在哪里(win7开始菜单变成经典模式)

    win7开始菜单设置在哪里(win7开始菜单变成经典模式)

    我们在用win7系统的时候,发现打开了一些程序后,会在开始菜单那里显示这些最近打开的程序。有些人不想把自己最近打开的程序显示在这里,那么怎么可以删除这些程序,或者彻底让这里不会显示最近打开程序呢?下面我来教大家删除或设置不显示最近打开的程序…