Maison > développement back-end > Tutoriel Python > Apprenez à utiliser query() en Python pour effectuer des requêtes élégantes dans un seul article

Apprenez à utiliser query() en Python pour effectuer des requêtes élégantes dans un seul article

青灯夜游
Libérer: 2022-02-03 09:00:29
avant
9560 Les gens l'ont consulté

Cet article parlera d'une petite astuce sur l'utilisation de la bibliothèque Python Pandas et présentera la méthode de requête élégante utilisant query(). J'espère que cela sera utile à tout le monde !

Apprenez à utiliser query() en Python pour effectuer des requêtes élégantes dans un seul article

Pour que Pandas obtienne des données spécifiées en fonction de conditions, je pense que tout le monde peut facilement écrire le code correspondant, mais si vous n'avez pas utilisé de requête, je pense que vous serez impressionné par sa simplicité !

Utilisation générale

Créez d'abord un 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)})
Copier après la connexion

Nous sélectionnons maintenant toutes les lignes où les lettres de la colonne A apparaissent dans la colonne B. Examinons d'abord deux manières courantes d'écrire.

>>> 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
Copier après la connexion

Utilisez query() ci-dessous pour implémenter. 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
Copier après la connexion

可以看到使用 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
Copier après la connexion

这里 and 也可以用 & 表示。

引用变量

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

>>> number = 5
>>> df.query('A in B & C > @number')
   A  B  C  D  E.E
3  b  d  6  4    7
Copier après la connexion

索引选取

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

>>> df.query('A in B and index > 2')
   A  B  C  D  E.E
3  b  d  6  4    7
Copier après la connexion

多索引选取

创建一个两层索引的 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
Copier après la connexion

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

>>> df.query("color == 'red'")
            A  B
color rank      
red   3     6  7
      4     8  9
Copier après la connexion

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
Copier après la connexion

特殊字符

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

>>> 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
Copier après la connexion
Vous pouvez voir que le code après avoir utilisé query est concis et facile à comprendre, et qu'il consomme moins de mémoire.

Requête multi-conditions

Sélectionnez 🎜Toutes les lignes où les lettres de la colonne A apparaissent dans la colonne B et où la colonne C est plus petite que la colonne D 🎜. 🎜rrreee🎜Ici, et peuvent également être représentés par &. 🎜🎜🎜Variables de référence🎜🎜🎜Les variables définies en externe peuvent également être utilisées dans des expressions, marquées d'un @ avant le nom de la variable. 🎜rrreee🎜🎜Sélection d'index🎜🎜🎜Sélectionnez 🎜Toutes les lignes où les lettres de la colonne A apparaissent dans la colonne B et l'index est supérieur à 2🎜. 🎜rrreee🎜🎜Sélection multi-index🎜🎜🎜Créez un DataFrame avec deux niveaux d'index. 🎜rrreee🎜1. Lorsqu'il existe plusieurs couches d'index avec des noms, sélectionnez-les directement par le nom de l'index. 🎜rrreee🎜2. Lorsqu'il existe plusieurs couches d'index sans nom, sélectionnez par niveau d'index. 🎜rrreee🎜🎜Caractères spéciaux🎜🎜🎜Pour les noms de colonnes avec des espaces ou d'autres symboles spéciaux tels que des opérateurs au milieu, vous devez utiliser des backticks ``. 🎜rrreee🎜En général, l'utilisation de query() est relativement simple, vous pouvez démarrer rapidement et la lisibilité du code a également été considérablement améliorée. 🎜🎜【Recommandation associée : 🎜Tutoriel vidéo Python3🎜】🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:juejin.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal