Filtrage Pandas efficace pour plusieurs sous-chaînes dans une série
Déterminer si une série contient l'une des plusieurs sous-chaînes est une tâche courante dans l'analyse des données. Bien que l'utilisation d'opérations logiques ou la combinaison d'opérations str.contains individuelles offre une solution simple, elle peut s'avérer inefficace pour les longues listes de sous-chaînes et les grandes trames de données.
Pour optimiser cette tâche, envisagez d'adopter une approche d'expression régulière (regex). En encapsulant les sous-chaînes dans un modèle regex, nous pouvons exploiter les fonctions efficaces de correspondance de chaînes des pandas. Plus précisément, après avoir échappé les caractères spéciaux dans les sous-chaînes, nous pouvons construire un modèle d'expression régulière en joignant les sous-chaînes à l'aide du caractère barre verticale (|) :
import re esc_lst = [re.escape(s) for s in lst] pattern = '|'.join(esc_lst)
Avec ce modèle, nous pouvons filtrer la série à l'aide de str. contient et une correspondance insensible à la casse :
df[col].str.contains(pattern, case=False)
Cette approche offre des performances améliorées, en particulier pour les trames de données volumineuses. Prenons l'exemple suivant :
from random import randint, seed seed(321) # 100 substrings of 5 characters lst = [''.join([chr(randint(0, 256)) for _ in range(5)]) for _ in range(100)] # 50000 strings of 20 characters strings = [''.join([chr(randint(0, 256)) for _ in range(20)]) for _ in range(50000)] col = pd.Series(strings) esc_lst = [re.escape(s) for s in lst] pattern = '|'.join(esc_lst)
En utilisant cette approche optimisée, l'opération de filtrage prend environ 1 seconde pour 50 000 lignes et 100 sous-chaînes, ce qui est nettement plus rapide que la méthode décrite dans la question d'origine. La différence de performances devient encore plus prononcée pour les trames de données et les listes de sous-chaînes plus grandes.
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!