Effiziente Pandas-Filterung für mehrere Teilzeichenfolgen in einer Reihe
Die Bestimmung, ob eine Reihe eine von mehreren Teilzeichenfolgen enthält, ist eine häufige Aufgabe bei der Datenanalyse. Während die Verwendung logischer Operationen oder das Kombinieren einzelner str.contains-Operationen eine einfache Lösung darstellt, kann sie für lange Teilzeichenfolgenlisten und große Datenrahmen ineffizient sein.
Um diese Aufgabe zu optimieren, sollten Sie die Verwendung eines Ansatzes mit regulären Ausdrücken (Regex) in Betracht ziehen. Indem wir die Teilzeichenfolgen in ein Regex-Muster einschließen, können wir die effizienten Zeichenfolgenvergleichsfunktionen von Pandas nutzen. Konkret können wir nach dem Escapezeichen für alle Sonderzeichen in den Teilzeichenfolgen ein Regex-Muster erstellen, indem wir die Teilzeichenfolgen mit dem Pipe-Zeichen (|) verbinden:
import re esc_lst = [re.escape(s) for s in lst] pattern = '|'.join(esc_lst)
Mit diesem Muster können wir die Reihe mit str filtern. enthält und case-insensitive Matching:
df[col].str.contains(pattern, case=False)
Dieser Ansatz bietet eine verbesserte Leistung, insbesondere für große Datenrahmen. Betrachten Sie das folgende Beispiel:
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)
Mit diesem optimierten Ansatz dauert der Filtervorgang etwa 1 Sekunde für 50.000 Zeilen und 100 Teilzeichenfolgen, deutlich schneller als die in der ursprünglichen Frage beschriebene Methode. Der Leistungsunterschied wird bei größeren Datenrahmen und Teilzeichenfolgenlisten noch deutlicher.
Das obige ist der detaillierte Inhalt vonWie kann ich eine Pandas-Serie effizient nach mehreren Teilzeichenfolgen filtern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!