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

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

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

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

    版权声明:34楼发布

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

    分享给朋友:

    相关文章

    怎么用兴趣造句?15句关于兴趣的造句示例

    怎么用兴趣造句?15句关于兴趣的造句示例

    很多人不知道怎么用兴趣造句?下面小编整理了15句关于兴趣的造句示例希望对大家有所帮助。…

    苹果X快充PD充电器推荐,现在下载还有优惠券可以领呢

    苹果X快充PD充电器推荐,现在下载还有优惠券可以领呢

    现在有很多人用的是苹果手机,因为平时有些人不注意使用方式或者使用充电器比较频繁导致损坏。大家都知道苹果手机和安卓手机的充电器是不一样的,不能用安卓手机的充电器充苹果手机。所以,大家如果苹果手机充电器损坏了,需要购买的话就要买个专门的苹果手机…

    圣诞节送女生什么礼物好?送女朋友比较合适的礼物分享

    圣诞节送女生什么礼物好?送女朋友比较合适的礼物分享

    圣诞节送女生什么礼物好?可以送口红、围巾、衣服、化妆品、暖手宝等。有些人还会亲自动手为女朋友做一些创意小礼物,这样就更加贴心了,如果你有女朋友,不知道该送什么好的话,下面小编为大家推荐几种可以送女朋友的礼物,好好看下吧。…

    融资丨「镭昱半导体」获千万美元Pre-A轮融资,全彩Micro-LED微显示芯片助力元宇宙发展

    融资丨「镭昱半导体」获千万美元Pre-A轮融资,全彩Micro-LED微显示芯片助力元宇宙发展

    创业邦获悉,近日,镭昱半导体(Raysolve)宣布完成千万美元Pre-A轮融资,由高榕资本领投,耀途资本跟投,泰合资本担任独家财务顾问。至此,在短短半年内,镭昱半导体完成两轮融资,累计获得投资近亿元人民币。本轮融资将用于公司的全球首款标准…

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

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

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

    直播间里“拆盲盒”,二手电商平台「Whatnot」拆出15亿美元丨快鲤鱼海外

    直播间里“拆盲盒”,二手电商平台「Whatnot」拆出15亿美元丨快鲤鱼海外

    靠着直播带货和“拆盲盒”,二手潮品电商平台 Whatnot 在今年已经完成了3轮融资,公司估值达到 15 亿美元,成立2年便跻身独角兽之列。 通过商品认证转卖、直播拍卖、直播间开“盲盒”等看似有点“中国味”的玩儿法,Whatnot一改美国二…