Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :Extraire ce qui contient...
Python offre de nombreuses méthodes pour bâtir des formules remarquables dans
Excel. L'une d'entre elles est toute particulière. Elle permet d'extraire les lignes d'un tableau pour lesquelles un champ en particulier contient un
mot ou un terme cherché. Cette méthode se nomme
contains. Nous allons la démontrer dans ce nouveau sujet.
Classeur Excel à télécharger
Nous suggérons de baser l'étude sur un classeur Excel existant.
Nous découvrons un tableau d'articles vestimentaires sur la gauche de la feuille, entre les
colonnes A et G. Juste au-dessus en
cellule A3, un
DataFrame Python le représente. Nous l'avons nommé
bd pour base de données :
bd=xl("A6:G250", headers=True).
Sur la droite, une grille d'extraction est prévue entre les
colonnes I et P. Au-dessus, l'utilisateur peut émettre deux critères textuels à l'aide de deux listes déroulantes en
cellules K3 et K4. Pour pouvoir les exploiter par
formule Python, nous les avons encapsulés sous les noms
cr1 et
cr2 en
cellules L3 et L4 selon les syntaxes suivantes :
cr1=xl("K3") et
cr2=xl("K4").
La méthode contains
Il est donc question d'extraire toutes les lignes pour lesquelles le
champ nom contient soit le premier mot cherché, soit le second. Nous devons donc bâtir une double condition d'extraction non exclusive.
- Cliquer sur la première case vide de la grille d'extraction pour sélectionner la cellule I6,
- Réaliser le raccourci clavier CTRL + ALT + MAJ + P pour activer Python,
- Débuter la syntaxe comme suit : bd[bd["nom"],
Nous agissons sur la base de données représentée par le
nom bd. Et à l'intérieur, nous souhaitons émettre un critère de recherche sur le
champ nom.
- Taper un point (.) suivi de la propriété str,
str pour
string, c'est ainsi que nous indiquons vouloir agir sur du contenu textuel.
- Taper un nouveau point, suivi de la méthode contains, comme suit : .contains(cr1),
Sur ce contenu textuel dans le
champ nom et pour toutes les lignes du tableau, nous cherchons donc toutes les cellules qui embarquent le texte encapsulé dans l'
objet Python cr1.
- Fermer le crochet de la base de données (]),
- Valider la formule par le raccourci clavier CTRL + Entrée,
Nous obtenons un
DataFrame mais nous souhaitons exploiter visuellement ces données.
- A gauche de la barre de formule, cliquer sur la flèche dirigée vers le bas,
- Dans les propositions, choisir Valeur Excel,
Nous obtenons bien l'extraction de toutes les lignes contenant le premier mot clé cherché dans le champ du nom. Bien sûr, si vous changez ce mot clé avec la première liste déroulante, après un petit temps d'analyse, l'extraction s'ajuste automatiquement et en parfaite cohérence.
Critère OU
Mais nous l'avons dit, nous souhaitons combiner deux axes de recherche de façon non exclusive. Le deuxième mot-clé doit donc être pris en considération. En
Python, l'
opérateur OU se matérialise par la barre verticale (|).
- Sélectionner de nouveau la cellule I6,
- Dans la barre de formule, cliquer juste avant le crochet fermant,
- Taper un espace suivi de l'opérateur OU (|) suivi d'un nouvel espace,
- Selon le principe précédent, lancer la recherche sur le deuxième mot :
bd["nom"].str.contains(cr2)
- Dès lors, valider l'adaptation de la formule par le raccourci CTRL + Entrée,
Nous obtenons bien l'extraction des lignes contenant le premier mot clé cherché ainsi que celles embarquant le second. Là encore, si vous changez ces termes de recherche avec les listes déroulantes, l'extraction à double critère s'ajuste automatiquement.
Trier sur le prix
Pour terminer la solution, il apparaît opportun de classer les lignes extraites n'ont pas dans leur ordre d'apparition dans le tableau d'origine, mais dans l'
ordre croissant sur les prix. Nous aurons ainsi une chronologie de lecture intéressante. Et comme nous l'avons déjà appris, c'est la
méthode Python sort_values qui permet ces organisations maîtrisées.
- Sélectionner de nouveau la cellule I6,
- Dans la barre de formule, cliquer à la fin de la syntaxe, après le crochet fermant,
- Taper un point (.) pour appeler la nouvelle méthode à suivre,
- Inscrire la méthode Python de tri comme suit : sort_values("prix"),
- Enfin, valider la formule par le raccourci CTRL + Entrée,
Nous obtenons toujours l'extraction sur les deux axes de recherche mais cette fois-ci restituée dans l'ordre croissant sur les prix, pour une meilleure lecture et comme nous le souhaitions.
La syntaxe complète que nous avons construite est la suivante :
bd[bd["nom"].str.contains(cr1) | bd["nom"].str.contains(cr2)].sort_values("prix")