Maison >développement back-end >Tutoriel Python >Comment puis-je filtrer efficacement les lignes Pandas en fonction de plusieurs sous-chaînes, y compris les caractères spéciaux ?

Comment puis-je filtrer efficacement les lignes Pandas en fonction de plusieurs sous-chaînes, y compris les caractères spéciaux ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-28 09:09:15636parcourir

How Can I Efficiently Filter Pandas Rows Based on Multiple Substrings, Including Special Characters?

Pandas : filtrer efficacement les lignes pour plusieurs sous-chaînes

Le filtrage des trames de données Pandas en fonction de plusieurs sous-chaînes peut être difficile, en particulier lorsque les sous-chaînes contiennent des caractères inhabituels . Cet article fournit une solution efficace utilisant une combinaison de fonctions de correspondance de chaînes regex et pandas.

La liste de sous-chaînes fournie (lst) contient des éléments avec des caractères normaux et spéciaux. Pour les faire correspondre littéralement, nous pouvons échapper à ces caractères spéciaux en utilisant re.escape et les joindre à l'aide d'un tube regex (|).

esc_lst = [re.escape(s) for s in lst]
pattern = '|'.join(esc_lst)

Maintenant, nous pouvons vérifier efficacement chaque ligne de la colonne cible (col) contre le modèle utilisant str.contains :

col.str.contains(pattern, case=False)

Cette approche surpasse considérablement la solution originale, qui utilisait des boucles imbriquées et plusieurs str.contains appels.

Comparaison des performances

En utilisant un ensemble de données avec 50 000 chaînes de 20 caractères et 100 sous-chaînes de 5 caractères, la méthode proposée prend environ 1 seconde :

%timeit col.str.contains(pattern, case=False)
1 loop, best of 3: 981 ms per loop

En comparaison, l'approche originale prenait environ 5 secondes sur la même ensemble de données.

Remarque : Les horaires représentent les pires scénarios où il n'y a eu aucune correspondance. La méthode proposée fonctionnera encore mieux lorsqu'il y aura des correspondances, car elle cessera de vérifier les sous-chaînes une fois qu'une correspondance sera trouvée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn