Filtrer les lignes des cadres de données en fonction des valeurs des colonnes dans Pandas

Suraj Joshi 30 janvier 2023
  1. Sélectionner les lignes Pandas en fonction de la valeur spécifique de la colonne
  2. Sélectionner les lignes Pandas qui ne contiennent pas de valeur de colonne spécifique
  3. Sélectionner des lignes Pandas avec des valeurs de colonne supérieures ou inférieures à une valeur spécifique
  4. Sélectionnez les lignes Pandas en fonction de plusieurs valeurs de colonne
  5. Sélectionner les lignes de DataFrame avec plusieurs conditions
Filtrer les lignes des cadres de données en fonction des valeurs des colonnes dans Pandas

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.

Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Article connexe - Pandas DataFrame

Article connexe - Pandas DataFrame Row