Amélioration des performances du filtrage de plusieurs sous-chaînes dans la série Pandas
Lorsque vous tentez de filtrer des lignes où une colonne de chaîne spécifique contient au moins une sous-chaîne d'un étant donné la liste, les méthodes conventionnelles utilisant np.logical_or.reduce() peuvent être inefficaces pour les grands ensembles de données. Cet article explore une approche alternative tirant parti des expressions régulières pour améliorer les performances.
Solution proposée
Au lieu d'utiliser regex=False dans str.contains(), nous utilisons des expressions régulières après avoir correctement échappé aux sous-chaînes fournies à l'aide de re.escape(). Cela garantit des correspondances littérales plutôt qu’une interprétation regex. Les sous-chaînes échappées sont ensuite combinées en un seul motif à l'aide d'un tube regex (|).
Processus de masquage
L'étape de masquage devient une boucle à travers la série, vérifiant si chaque chaîne correspond au motif :
df[col].str.contains(pattern, case=False)
Performance Comparaison
En utilisant un exemple d'ensemble de données avec 100 sous-chaînes de longueur 5 et 50 000 chaînes de longueur 20, la méthode proposée a pris environ 1 seconde. La méthode d'origine prenait environ 5 secondes pour les mêmes données.
Remarque
Cette solution suppose un scénario du « pire des cas » où il n'y a aucune correspondance de sous-chaîne. En cas de matchs, les performances seront encore améliorées. De plus, cette approche est plus efficace que la méthode initiale, réduisant le nombre de contrôles requis par ligne.
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!