Arrière-plan
Filtrage de grandes trames de données Pandas en fonction de plusieurs sous-chaînes dans une chaîne colonne peut être une opération coûteuse en termes de calcul. L'approche conventionnelle consiste à appliquer un masque pour chaque sous-chaîne, puis à la réduire à l'aide d'opérations logiques.
Approche proposée
Pour améliorer l'efficacité, nous suggérons d'exploiter les expressions régulières (avec échappement caractères spéciaux) pour la correspondance des sous-chaînes. En joignant les sous-chaînes échappées à l'aide d'un tube regex (|), nous pouvons tester chaque sous-chaîne par rapport à la chaîne jusqu'à ce qu'une correspondance soit trouvée.
Implémentation
import re # Escape special characters in substrings esc_lst = [re.escape(s) for s in lst] # Join escaped substrings using regex pipe pattern = '|'.join(esc_lst) # Filter based on concatenated pattern df[col].str.contains(pattern, case=False)
Considérations sur les performances
Les performances sont améliorées en réduisant le nombre de tests requis par ligne. La méthode vérifie les sous-chaînes jusqu'à ce qu'une correspondance soit trouvée, éliminant ainsi les itérations inutiles.
Benchmarking
En utilisant un exemple de trame de données avec 50 000 chaînes et 100 sous-chaînes, la méthode proposée prend environ une seconde, par rapport aux cinq secondes de l'approche conventionnelle. Cet avantage en termes de performances augmenterait avec un ensemble de données plus grand.
Conclusion
En exploitant les expressions régulières avec des caractères spéciaux échappés, nous pouvons filtrer efficacement les trames de données Pandas pour plusieurs sous-chaînes, réduisant ainsi considérablement surcharge de calcul.
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!