Dans Excel, la possibilité de filtrer les colonnes est un atout très avantageux lorsqu’il s’agit de sélectionner uniquement les lignes répondant à un critère donné.
Avec Python et les dataframes que l’on manipule avec Pandas, il arrive que l’on veuille également filtrer les valeurs d’une colonne. Par exemple, si une colonne contient des chaînes de caractères, on peut vouloir sélectionner uniquement les entrées dont l’attribut ciblé ne contient pas un certain mot.
Plus concrètement, imaginons un exemple simple, pour lequel on aurait une table dont une colonne Prénom/Nom contiendrait les prénoms et noms d’individus, et dont d’autres colonnes fourniraient des informations sur ces individus.
Imaginons à présent que l’on veuille s’intéresser à tous les individus, sauf à ceux qui s’appellent « Bob », alors on aimerait retirer les entrées de la table dont la valeur de Prénom/Nom contient la sous-chaîne de caractères "Bob".
On peut également imaginer des scénarios plus réalistes où l’on chercherait à filtrer des adresses email selon des noms de domaines donnés, ou bien des numéros de téléphone selon des préfixes donnés.
🚩Problème :
Comment filtrer les valeurs d’une colonne d’une dataframe qui ne contiennent pas un mot donné ?
✅Solution :
La ligne de code suivante permet de récupérer une dataframe new_df dont a retiré les entrées d’une dataframe df pour lesquelles un attribut ciblé colonne ne contient pas un certain mot sous_chaine :
new_df = df[~df[colonne].str.contains(sous_chaine, na=False)]
df[colonne].str.contains(sous_chaine, na=False)donne un masque booléen indiquant les lignes pour lesquelles la colonnecolonnede la dataframedfcontiennent la chaîne de caractèressous_chaineà l’intérieur de leur texte. L’optionna=Falsepermet d’ignorer les NaN.~permet de prendre la négation du masque de booléen.- Finalement, on donne le masque résultant à
dfpour en extraire les lignes ciblées.
🤠Exemple :
Voici un exemple tout simple dans lequel on va filtrer les entrées de notre table selon un mot.
On commence par instancier une table pour l’exemple
import pandas as pd
df = pd.DataFrame(data={
"Prénom/Nom": ["Alain Dupont", "Alice Dupont", "Bob Durand", "Claire Martin"],
"Genre": ["Homme", "Femme", "Homme", "Femme"],
})

df pour l’exempleAdmettons que l’on veuille conserver uniquement les lignes pour lesquelles l’individu n’a pas « Dupont » pour nom de famille :
sous_chaine = "Dupont"
colonne = "Prénom/Nom"
new_df = df[~df[colonne].str.contains(sous_chaine, na=False)]

new_df sans « Dupont »Faisons un deuxième exemple. Cette fois, retirons toutes les entrées pour lesquelles quelqu’un s’appelle « Bob » :
sous_chaine = "Bob"
colonne = "Prénom/Nom"
new_df = df[~df[colonne].str.contains(sous_chaine, na=False)]

new_df sans « Bob »
Laisser un commentaire