Maison > développement back-end > Tutoriel Python > Comment puis-je filtrer efficacement un DataFrame Pandas pour plusieurs sous-chaînes, gestion de la casse et des caractères spéciaux ?

Comment puis-je filtrer efficacement un DataFrame Pandas pour plusieurs sous-chaînes, gestion de la casse et des caractères spéciaux ?

Barbara Streisand
Libérer: 2024-12-05 16:50:12
original
240 Les gens l'ont consulté

How Can I Efficiently Filter a Pandas DataFrame for Multiple Substrings, Handling Case and Special Characters?

Filtrer efficacement les trames de données Pandas pour plusieurs sous-chaînes

Le filtrage des trames de données pour les sous-chaînes est une tâche courante, mais elle peut devenir coûteuse en termes de calcul avec de grands ensembles de données. Le défi est encore aggravé lorsqu'il s'agit de caractères inhabituels et de correspondances insensibles à la casse.

Problème :

Étant donné une trame de données Pandas avec une colonne de chaîne, filtrer efficacement les lignes telles que la colonne contient au moins une sous-chaîne parmi une liste de sous-chaînes, quelle que soit la casse et la présence de caractères spéciaux.

Inefficace Approche :

L'approche initiale impliquait d'itérer sur chaque sous-chaîne de la liste et d'appliquer la méthode str.contains() avec les indicateurs regex=False et case=False. Bien que cette approche soit simple, elle peut être lente pour les grands ensembles de données.

Approche efficace :

Une solution plus efficace utilise des expressions régulières pour construire un modèle contenant tous les éléments échappés. sous-chaînes jointes par un tube regex |. Ce modèle est ensuite vérifié par rapport à chaque chaîne de la colonne à l'aide de la méthode str.contains().

import re

lst = ['kdSj;af-!?', 'aBC+dsfa?\-', 'sdKaJg|dksaf-*']
esc_lst = [re.escape(s) for s in lst]
pattern = '|'.join(esc_lst)
df[col].str.contains(pattern, case=False)
Copier après la connexion

Cette approche fonctionne beaucoup plus rapidement que l'approche itérative, en particulier pour les grands ensembles de données et les sous-chaînes qui nécessitent une évasion.

Évaluation des performances :

Utilisation d'un ensemble de données avec 50 000 chaînes et 100 sous-chaînes, la méthode proposée prend environ 1 seconde, tandis que la méthode itérative prend environ 5 secondes. Le timing s'améliore encore si l'une des sous-chaînes correspond aux valeurs de la colonne.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal