Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich eine Pandas-Serie effizient nach mehreren Teilzeichenfolgen filtern?

Wie kann ich eine Pandas-Serie effizient nach mehreren Teilzeichenfolgen filtern?

Linda Hamilton
Freigeben: 2024-11-23 18:17:20
Original
342 Leute haben es durchsucht

How Can I Efficiently Filter a Pandas Series for Multiple Substrings?

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)
Nach dem Login kopieren

Mit diesem Muster können wir die Reihe mit str filtern. enthält und case-insensitive Matching:

df[col].str.contains(pattern, case=False)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage