Filtrer les lignes des cadres de données en fonction des valeurs des colonnes dans Pandas
- Sélectionner les lignes Pandas en fonction de la valeur spécifique de la colonne
- Sélectionner les lignes Pandas qui ne contiennent pas de valeur de colonne spécifique
- Sélectionner des lignes Pandas avec des valeurs de colonne supérieures ou inférieures à une valeur spécifique
- Sélectionnez les lignes Pandas en fonction de plusieurs valeurs de colonne
- Sélectionner les lignes de DataFrame avec plusieurs conditions
Nous pouvons sélectionner des lignes de DataFrame
sur la base d’une seule ou de plusieurs valeurs de colonne. Nous pouvons également obtenir des lignes de DataFrame
satisfaisant ou ne satisfaisant pas une ou plusieurs conditions. Cela peut être accompli en utilisant l’indexation booléenne, l’indexation positionnelle, l’indexation par étiquette et la méthode de requête (query()
).
Sélectionner les lignes Pandas en fonction de la valeur spécifique de la colonne
Nous pouvons sélectionner des lignes de pandas à partir d’un DataFrame qui contient ou non la valeur spécifique d’une colonne. Il est largement utilisé pour filtrer le DataFrame en fonction de la valeur de la colonne.
Sélectionner les lignes de pandas qui contiennent la valeur spécifique d’une colonne
Filtrer en utilisant l’indexation booléenne
Dans l’indexation booléenne, nous générons d’abord un masque qui est juste une série de valeurs booléennes représentant si la colonne contient l’élément spécifique ou non.
df_mask = df["col_name"] == "specific_value"
Nous appliquons ensuite ce masque à notre DataFrame d’origine pour filtrer les valeurs requises.
filtered_df = df[df_mask]
Ceci retourne le DataFrame filtré contenant seulement les lignes qui ont la valeur_spécifique
pour la colonne col_name
.
import pandas as pd
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
df_mask = df["Sales"] == 300
filtered_df = df[df_mask]
print(filtered_df)
Production :
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
Cela donne toutes les lignes dans le df
dont la valeur Sales
est 300
.
Filtrer en utilisant l’indexation positionnelle
Elle est similaire à l’indexation booléenne mais comporte une étape supplémentaire. Dans cette méthode, nous créons d’abord un masque booléen et nous trouvons ensuite les positions auxquelles le masque booléen a une valeur True
. Ensuite, nous utilisons la méthode iloc()
pour passer toutes les positions avec la valeur True
dans le masque à la méthode iloc()
de sorte que toutes les lignes désirées soient seulement sélectionnées.
import pandas as pd
import numpy as np
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
df_mask = df["Sales"] == 300
positions = np.flatnonzero(df_mask)
filtered_df = df.iloc[positions]
print(filtered_df)
Production :
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
Cela donne également toutes les lignes du df
dont les valeurs de Sales
sont 300
.
Enchaînement des pandas
Nous pouvons également utiliser Pandas Chaining pour filtrer le filtre de DataFrame pandas par valeur de colonne. Dans cette méthode, nous utilisons pandas.DataFrame.eq()
méthode pour la colonne DataFrame dont les valeurs doivent être vérifiées pour comparer l’égalité par élément dans DataFrame.
import pandas as pd
import numpy as np
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
filtered_df = df[df.Sales.eq(300)]
print(filtered_df)
Production :
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
pandas.DataFrame.query()
Nous pourrions utiliser pandas.DataFrame.query()
pour sélectionner des lignes par valeur de colonne dans Pandas.
import pandas as pd
import numpy as np
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
filtered_df = df.query("Sales == 300")
print(filtered_df)
Production :
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
Si nous souhaitons mettre à jour le DataFrame existant, nous pouvons définir inplace=True
dans la méthode de requête.
Sélectionner les lignes Pandas qui ne contiennent pas de valeur de colonne spécifique
La méthode pour sélectionner des lignes Pandas qui ne contiennent pas de valeur de colonne spécifique est similaire à celle utilisée pour sélectionner des lignes Pandas avec une valeur de colonne spécifique. La seule chose que nous devons changer est la condition que la colonne ne contient pas de valeur spécifique en remplaçant simplement ==
par !=
Lors de la création de masques ou de requêtes.
import pandas as pd
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
df_mask = df["Sales"] != 300
filtered_df = df[df_mask]
print(filtered_df)
Production :
Date Sales Price
0 April-10 200 3
2 April-12 400 2
3 April-13 200 4
Ceci sélectionne toutes les lignes de df
dont les valeurs de Sales
ne sont pas 300
.
Sélectionner des lignes Pandas avec des valeurs de colonne supérieures ou inférieures à une valeur spécifique
Pour sélectionner les lignes Pandas avec des valeurs de colonne supérieures ou inférieures à une valeur spécifique, nous utilisons des opérateurs comme >
, <=
, >=
tout en créant des masques ou des requêtes.
import pandas as pd
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
df_mask = df["Sales"] >= 300
filtered_df = df[df_mask]
print(filtered_df)
Production :
Date Sales Price
1 April-11 300 1
2 April-12 400 2
4 April-14 300 3
5 April-16 300 2
Cela donne un DataFrame avec des valeurs de Sales
supérieures ou égales à 300
.
Sélectionnez les lignes Pandas en fonction de plusieurs valeurs de colonne
Nous avons introduit des méthodes de sélection de lignes basées sur des valeurs spécifiques de colonne dans DataFrame. Dans cette section, nous discuterons des méthodes pour sélectionner des lignes Pandas en fonction de plusieurs valeurs de colonne.
Sélectionnez les lignes Pandas qui contiennent l’une des valeurs de plusieurs colonnes
Pour sélectionner les lignes Pandas qui contiennent une ou plusieurs valeurs de colonne, nous utilisons pandas.DataFrame.isin(values)
qui renvoie un DataFrame de booléens indiquant si chaque élément du DataFrame est contenu dans des valeurs ou non. Le DataFrame de booléens ainsi obtenu peut être utilisé pour sélectionner des lignes.
import pandas as pd
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
values = [200, 400]
filtered_df = df[df.Sales.isin(values)]
print(filtered_df)
Production :
Date Sales Price
0 April-10 200 3
2 April-12 400 2
3 April-13 200 4
Il filtre toutes les lignes de DataFrame dont la valeur Sales
est soit 200
soit 400
.
Sélectionnez les lignes Pandas qui ne contiennent aucune des valeurs de colonne spécifiées
Pour sélectionner les lignes d’un DataFrame qui ne contient aucune des multiples valeurs de colonne spécifiées, nous annulerons le DataFrame des booléens renvoyés par pandas.DataFrame.isin(values)
en plaçant le signe ~
au début.
import pandas as pd
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
values = [200, 400]
filtered_df = df[~df.Sales.isin(values)]
print(filtered_df)
Production :
Date Sales Price
1 April-11 300 1
4 April-14 300 3
5 April-16 300 2
Il filtre toutes les lignes de DataFrame dont la valeur Sales
n’est ni 200
ni 400
.
Sélectionner les lignes de DataFrame avec plusieurs conditions
Si nous voulons filtrer les lignes en tenant compte des valeurs de lignes de plusieurs colonnes, nous faisons plusieurs conditions et les combinons avec des opérateurs &
. Maintenant, la ligne n’est sélectionnée que lorsqu’elle remplit les conditions pour toutes les colonnes.
import pandas as pd
dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]
df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})
values_1 = [200, 400]
values_2 = [2, 3]
filtered_df = df[df.Sales.isin(values_1) & ~df.Price.isin(values_2)]
print(filtered_df)
Production :
Date Sales Price
3 April-13 200 4
Il filtre toutes les lignes de DataFrame dont la valeur Sales
est 200
ou 400
et la valeur Price
n’est ni 2 ni 3. La ligne dans la sortie ne remplit que les deux conditions dans DataFrame entier.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedInArticle connexe - Pandas DataFrame
- Comment obtenir les en-têtes de colonne de Pandas DataFrame sous forme de liste
- Comment supprimer une colonne de Pandas DataFrame
- Comment convertir la colonne DataFrame en date-heure dans Pandas
- Comment convertir un float en un entier dans Pandas DataFrame
- Comment trier le DataFrame de Pandas par les valeurs d'une colonne
- Comment obtenir l'agrégat des Pandas par groupe et par somme
Article connexe - Pandas DataFrame Row
- Comment obtenir le nombre de lignes d'un Pandas DataFrame
- Comment mélanger au hasard les lignes DataFrame dans Pandas
- Comment parcourir les lignes d'un DataFrame dans Pandas
- Comment obtenir l'index de toutes les lignes dont la colonne particulière satisfait la condition donnée dans Pandas
- Les Pandas déposent des lignes en double