Maison > Article > développement back-end > Apprenez à utiliser query() en Python pour effectuer des requêtes élégantes dans un seul article
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 !
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é !
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)})
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
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
可以看到使用 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 6Vous pouvez voir que le code après avoir utilisé
query
est concis et facile à comprendre, et qu'il consomme moins de mémoire.
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!