introduction
Cet article présente diverses extractions conditionnelles à l'aide de requête, qui est l'une des fonctions pandas.
D'après mon expérience, j'écrirai le code réel basé sur 10 exemples fréquemment rencontrés lors du prétraitement des données.
Environnement d'exécution
- mac OS Mojave
- Python 3.7.3
!python -V
Python 3.7.3
Module utilisé
La version de pandas utilise la version 1.0.3.
- Une erreur peut se produire si la version est la version 0.24.0 ou antérieure.
import pandas as pd #Le rôle principal cette fois
import numpy as np #Utilisé pour générer des valeurs inf et nan
#Vérifier la version des pandas
print(pd.__version__)
1.0.3
Préparation des données
#Préparation de la trame de données à utiliser cette fois
df = pd.DataFrame({
'a': range(1, 6),
'b': range(10, 0, -2),
'c c' : [1, 3, 5, 7, 9],
'd' : [2, np.nan, np.inf, None, 10],
'e' : ['a', 'b', 'c', 'd', 'e'],
'f' : [False, True, True, False, True]})
#Vérifier la trame de données
df
|
a |
b |
c c |
d |
e |
f |
0 |
1 |
10 |
1 |
2.0 |
a |
False |
1 |
2 |
8 |
3 |
NaN |
b |
True |
2 |
3 |
6 |
5 |
inf |
c |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
10 sélections d'extraction de données
- [Extraction de condition dans 1 colonne](Extraction de condition dans la colonne # 1)
- [Extraction de conditions avec plusieurs colonnes](# Extraction de conditions avec plusieurs colonnes)
- [Extraction de conditions de colonnes contenant des espaces dans les noms de colonnes](# Extraction de conditions de colonnes contenant des espaces dans les noms de colonnes)
- [Extraction de condition par spécification de chaîne de caractères](# Extraction de condition par spécification de chaîne de caractères)
- [Extraction de conditions par plusieurs conditions](# Extraction de conditions par plusieurs conditions)
- [Extraction de condition par spécification inf](Extraction de condition par spécification #inf)
- [Extraction de condition en spécifiant une valeur manquante](# Extraction de condition en spécifiant une valeur manquante)
- [Extraction de condition en spécifiant une valeur booléenne](# Extraction conditionnelle en spécifiant une valeur booléenne)
- [Extraction de condition à l'aide de la liste](# Extraction de la condition à l'aide de la liste)
- [Extraction de conditions à l'aide de variables](# Extraction de conditions à l'aide de variables)
Extraction de condition dans une colonne
Extraction conditionnelle de base en utilisant une seule colonne de la trame de données. Des opérateurs de comparaison normaux peuvent être utilisés.
df.query('a == 3') #Extraire les lignes où la colonne a a une valeur de 3
|
a |
b |
c c |
d |
e |
f |
2 |
3 |
6 |
5 |
inf |
c |
True |
df.query('a != 3') #Extrayez les lignes dont la valeur de la colonne a n'est pas 3.
|
a |
b |
c c |
d |
e |
f |
0 |
1 |
10 |
1 |
2.0 |
a |
False |
1 |
2 |
8 |
3 |
NaN |
b |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
df.query('a > 3') #Extraire les lignes dont la colonne a une valeur supérieure à 3
|
a |
b |
c c |
d |
e |
f |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
Extraction de conditions dans plusieurs colonnes
Extraction conditionnelle à l'aide de valeurs entre plusieurs colonnes
df.query('a > b') #Extraire les lignes où la valeur de la colonne a est supérieure à la valeur de la colonne b
|
a |
b |
c c |
d |
e |
f |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
Extraction conditionnelle de colonnes contenant des espaces dans les noms de colonnes
Si le nom de la colonne contient des espaces, le nom de la colonne doit être placé entre guillemets (\ `).
Étant donné que cette fonction a été implémentée dans pandas 0.25.0, une erreur se produira dans la version 0.24.0 ou antérieure.
https://pandas-docs.github.io/pandas-docs-travis/whatsnew/v0.25.0.html#other-enhancements
df.query(' `c c` > b') #c Extraire les lignes où la valeur de la colonne c est supérieure à la valeur de la colonne b
|
a |
b |
c c |
d |
e |
f |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
Extraction de condition en spécifiant une chaîne de caractères
Si la condition est spécifiée sous forme de chaîne, la valeur doit être placée entre guillemets (").
df.query('e == "a" ') #La valeur de la colonne e est une chaîne"a"Extraire la ligne qui est
|
a |
b |
c c |
d |
e |
f |
0 |
1 |
10 |
1 |
2.0 |
a |
False |
Extraction de conditions par plusieurs conditions
Extraction de conditions à l'aide de plusieurs conditions et opérateurs logiques tels que et et ou.
df.query('a > 2 and b < 3') #Extraire les lignes où la valeur de la colonne a est supérieure à 2 et la valeur de la colonne b est inférieure à 3
|
a |
b |
c c |
d |
e |
f |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
df.query('a > 2 or b < 3') #Extraire les lignes où la valeur de la colonne a est supérieure à 2 ou la valeur de la colonne b est inférieure à 3
|
a |
b |
c c |
d |
e |
f |
2 |
3 |
6 |
5 |
inf |
c |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
df.query('a > 2 or e == "d" ') #La valeur de la colonne a est supérieure à 2 ou la valeur de la colonne e est une chaîne"d"Extraire la ligne qui est
|
a |
b |
c c |
d |
e |
f |
2 |
3 |
6 |
5 |
inf |
c |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
df.query(' 2<= a <= 4') #Extraire les lignes où la valeur de la colonne a est 2 ou plus et 4 ou moins
|
a |
b |
c c |
d |
e |
f |
1 |
2 |
8 |
3 |
NaN |
b |
True |
2 |
3 |
6 |
5 |
inf |
c |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |
Extraction de condition en spécifiant inf
Si la valeur a inf, extrayez comme suit.
df.query(' d == inf') #Extraire les lignes où la valeur de la colonne d est inf
|
a |
b |
c c |
d |
e |
f |
2 |
3 |
6 |
5 |
inf |
c |
True |
df.query(' d != inf') #Extraire les lignes où la valeur de la colonne d n'est pas inf
|
a |
b |
c c |
d |
e |
f |
0 |
1 |
10 |
1 |
2.0 |
a |
False |
1 |
2 |
8 |
3 |
NaN |
b |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
Extraction de conditions en spécifiant les valeurs manquantes
Si la valeur a une valeur manquante, extrayez-la comme suit.
df.query(' d != d') #Extraire les lignes où la valeur de la colonne d est manquante
|
a |
b |
c c |
d |
e |
f |
1 |
2 |
8 |
3 |
NaN |
b |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |
df.query(' d == d') #Extraire les lignes où la valeur de la colonne d n'est pas manquante
|
a |
b |
c c |
d |
e |
f |
0 |
1 |
10 |
1 |
2.0 |
a |
False |
2 |
3 |
6 |
5 |
inf |
c |
True |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
Extraction de condition en spécifiant une valeur booléenne
Si la valeur a une valeur booléenne telle que True ou False, procédez à l'extraction comme suit.
df.query('f == True') #Extraire les lignes où la valeur de la colonne f est True
|
a |
b |
c c |
d |
e |
f |
1 |
2 |
8 |
3 |
NaN |
b |
True |
2 |
3 |
6 |
5 |
inf |
c |
True |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
df.query('f == False') #Extraire les lignes où la valeur de la colonne f est False
|
a |
b |
c c |
d |
e |
f |
0 |
1 |
10 |
1 |
2.0 |
a |
False |
3 |
4 |
4 |
7 |
NaN |
d |
False |
Extraction conditionnelle à l'aide d'une liste
L'extraction conditionnelle est possible selon que la valeur est ou non dans la liste.
df.query(' a in (1, 2, 3)') #La valeur de la colonne a est(1, 2, 3)Extraire une ligne qui est l'une des
|
a |
b |
c c |
d |
e |
f |
0 |
1 |
10 |
1 |
2.0 |
a |
False |
1 |
2 |
8 |
3 |
NaN |
b |
True |
2 |
3 |
6 |
5 |
inf |
c |
True |
df.query(' a not in (1, 2, 3)') #La valeur de la colonne a est(1, 2, 3)Extraire une ligne qui n’est pas
|
a |
b |
c c |
d |
e |
f |
3 |
4 |
4 |
7 |
NaN |
d |
False |
4 |
5 |
2 |
9 |
10.0 |
e |
True |
Extraction conditionnelle à l'aide de variables
Il est possible d'utiliser une variable préparée à l'avance comme valeur de la condition.
x = 2 #Stocker 2 dans la variable x
df.query(' a == @x') #Extraire les lignes où la valeur de la colonne a est x
|
a |
b |
c c |
d |
e |
f |
1 |
2 |
8 |
3 |
NaN |
b |
True |
y = [2, 3, 4] #Enregistrer la liste dans la variable y
df.query('a in @y') #Extraire les lignes où la valeur de la colonne a est l'une de y
|
a |
b |
c c |
d |
e |
f |
1 |
2 |
8 |
3 |
NaN |
b |
True |
2 |
3 |
6 |
5 |
inf |
c |
True |
3 |
4 |
4 |
7 |
NaN |
d |
False |