Comment filtrer les lignes de trame de données en fonction des valeurs de colonne dans Pandas

  1. Sélectionnez les lignes Pandas en fonction de la valeur de colonne spécifique
  2. Sélectionnez 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 des lignes DataFrame avec plusieurs conditions

Nous pouvons sélectionner des lignes de DataFrame en fonction de valeurs de colonne uniques ou multiples. Nous pouvons également obtenir des lignes de DataFrame satisfaisant ou non à une ou plusieurs conditions. Cela peut être accompli en utilisant l'indexation booléenne, l'indexation positionnelle, l'indexation des étiquettes et la méthode query() .

Sélectionnez les lignes Pandas en fonction de la valeur de colonne spécifique

Nous pouvons sélectionner des lignes pandas dans un DataFrame qui contient ou ne contient pas la valeur spécifique d’une colonne. Il est largement utilisé pour filtrer le DataFrame en fonction de la valeur de la colonne.

Sélectionnez les lignes Pandas qui contiennent une valeur de colonne spécifique

Filtrer à l’aide de l’indexation booléenne

Dans l’indexation booléenne, nous générons d’abord un masque qui n’est qu’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]

Cela retourne le DataFrame filtré contenant uniquement les lignes qui ont la specific_value 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 du df dont les valeurs de Sales sont 300.

Filtrer à l’aide de l’indexation positionnelle

Il est similaire à l’indexation booléenne mais implique une étape supplémentaire. Dans cette méthode, nous créons d’abord un masque booléen, puis trouvons les positions auxquelles le masque booléen a la valeur “True”. Ensuite, nous utilisons passer toutes les positions avec la valeur True dans le masque à la méthode iloc() afin que toutes les lignes souhaitées soient uniquement 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.

Chaînes de pandas

Nous pouvons également utiliser Pandas Chaining pour filtrer le filtre de trame de données 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 les 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électionnez 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 des lignes Pandas avec des valeurs de colonne supérieures ou inférieures à une valeur spécifique, nous utilisons des opérateurs tels que >, <=, > = 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
1  April-11    300      1
2  April-12    400      2
4  April-14    300      3
5  April-16    300      2

Il en résulte 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 des lignes Pandas contenant l’une des valeurs de plusieurs colonnes, nous utilisons pandas.DataFrame.isin(values) qui retourne le DataFrame des booléens indiquant si chaque élément du DataFrame est contenu dans des valeurs ou non. Le DataFrame des 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 multiples

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 ~ à l’avant.

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 des lignes DataFrame avec plusieurs conditions

Si nous voulons filtrer les lignes en tenant compte des valeurs de ligne de plusieurs colonnes, nous faisons plusieurs conditions et les combinons avec les opérateurs &. Désormais, 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.

Article connexe - Pandas DataFrame

  • Comment ajouter une nouvelle colonne à DataFrame existant avec une valeur par défaut dans Pandas
  • Comment trier le DataFrame de Pandas par les valeurs d'une colonne
  • Article connexe - Pandas DataFrame Row

  • Convertir la trame de données Pandas en dictionnaire
  • Comment créer une colonne vide dans Pandas DataFrame