Python中如何使用query()进行查询

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

常规用法
先创建一个 DataFrame。

image.png
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列 的所有行。先看两种常见写法。

image.png
>>> 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() 来实现。

image.png

>>> 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列 的所有行。

image.png

>>> 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。

image.png

>>> import numpy as np

>>> colors = ['yellow']*3 + ['red']*2

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: