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

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

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

    对于 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

    分享给朋友:

    相关文章

    适合年轻人创业项目,投资小又赚钱多的项目推荐

    适合年轻人创业项目,投资小又赚钱多的项目推荐

    社会在发展,科技在更新,生活也在发生着翻天覆地的变化。但是,唯一不变的是,年轻人创业的心,一直都没有变过。每个时代都会有很多想创业的年轻人,只是每个时代的年轻人创业项目都有所不同,那么,今天我们就说说适合现在年轻人创业的项目。…

    抖音黄v认证有什么好处(抖音流量高的是蓝v和黄v)

    抖音黄v认证有什么好处(抖音流量高的是蓝v和黄v)

    我将要在这里告诉你们关于抖音号橱窗蓝v抖音小店所有的知识,认真看完。…

    视频号加粉多少会被推荐?视频号制作方法分享

    视频号加粉多少会被推荐?视频号制作方法分享

    今天下午,视频号突然暂停申请,让原本打算在视频号大干一场的运营者们感到懵圈。不过据业内人士透露,此次暂停并“不会太久”,很快就会再次上线。…

    软件解压后怎么安装(手机解压软件app免费软件)

    软件解压后怎么安装(手机解压软件app免费软件)

    在PC端宅男、极客们会碰到需要解压缩文件的情况,这个时候大多会用到360压缩或者好压等第三方软件,然而到了移动手机端,由于自带的文件管理器大多不支持输入密码解压缩等复杂操作,让不少人对于手机解压缩文件失望,但是有时候电脑不在身边,又不得不在…

    一周涨粉几百万,“张同学”凭什么火?

    一周涨粉几百万,“张同学”凭什么火?

    编者按:本文来自微信公众号时趣研究院(ID:SocialTouch2020),作者:时有趣,创业邦经授权转载 在最近的一段时间里,名叫“张同学”的博主刷屏了抖音,相关话题频频登上热榜,甚至还得到了人民网的点评。 张同学第一个视频的发布日期…

    从商品采购到商品开发,叮咚买菜打造生态型供应链体系

    作者:苏敏 编辑:房煜 随着社会发展,人们越来越重视食品品质和安全问题,消费趋势也从“性价比”转向“品价比”,对让人放心又有特色的好商品的需求正与日增多。这就给如今的零售商们带来了新的挑战,也促进了行业合作中零供关系的升级。 在12月3日的…