Effizientes Filtern von Pandas-Datenrahmen für mehrere Teilzeichenfolgen
Das Filtern von Datenrahmen für Teilzeichenfolgen ist eine häufige Aufgabe, kann jedoch bei großen Datensätzen rechenintensiv werden. Die Herausforderung verschärft sich noch, wenn es um ungewöhnliche Zeichen und Übereinstimmungen geht, bei denen die Groß-/Kleinschreibung nicht beachtet wird.
Problem:
Bei einem Pandas-Datenrahmen mit einer Zeichenfolgenspalte müssen Zeilen effizient so gefiltert werden Die Spalte enthält mindestens einen aus einer Liste von Teilzeichenfolgen, unabhängig von Groß- und Kleinschreibung und dem Vorhandensein von Sonderzeichen.
Ineffizient Ansatz:
Der anfängliche Ansatz bestand darin, jeden Teilstring in der Liste zu durchlaufen und die Methode str.contains() mit den Flags regex=False und case=False anzuwenden. Obwohl dieser Ansatz unkompliziert ist, kann er bei großen Datensätzen langsam sein.
Effizienter Ansatz:
Eine effizientere Lösung verwendet reguläre Ausdrücke, um ein Muster zu erstellen, das alle maskierten Elemente enthält Teilzeichenfolgen, die durch eine Regex-Pipe | verbunden sind. Dieses Muster wird dann mit der Methode str.contains() anhand jeder Zeichenfolge in der Spalte überprüft.
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)
Dieser Ansatz ist deutlich schneller als der iterative Ansatz, insbesondere bei großen Datensätzen und Teilzeichenfolgen, die Escapezeichen erfordern.
Leistungsbewertung:
Verwendung eines Datensatzes mit 50.000 Zeichenfolgen und 100 Teilzeichenfolgen benötigt die vorgeschlagene Methode etwa 1 Sekunde, während die iterative Methode etwa 5 Sekunden benötigt. Das Timing verbessert sich weiter, wenn einer der Teilstrings mit den Spaltenwerten übereinstimmt.
Das obige ist der detaillierte Inhalt vonWie kann ich einen Pandas-DataFrame effizient nach mehreren Teilzeichenfolgen filtern und dabei Groß- und Kleinschreibung und Sonderzeichen behandeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!