Wie um zu testen, ob ein string mit einem Teilstring in einer Liste?
Gibt es eine Funktion, die wäre gleichbedeutend mit einer Kombination von df.isin()
und df[col].str.contains()
?
Zum Beispiel, sagen, dass ich die Serie
s = pd.Series(['cat','hat','dog','fog','pet'])
, und ich möchte finden Sie alle Orte, an denen s
enthält ['og', 'at']
, ich würde wollen, um alles, aber pet.
Ich habe eine Lösung, aber es ist eher unelegant:
searchfor = ['og', 'at']
found = [s.str.contains(x) for x in searchfor]
result = pd.DataFrame[found]
result.any()
Gibt es einen besseren Weg, dies zu tun?
- Hinweis: Es gibt eine Lösung beschrieben von @unutbu, die effizienter als die Verwendung von
pd.Series.str.contains
. Wenn die Leistung ein Problem ist, dann kann dies eine Untersuchung Wert. - Empfehle dem Auschecken die Antwort für Teil-string-Suche mit mehreren keywords/regexes (nach unten scrollen, um die "Mehrere Substring-Suche" Unterüberschrift).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer option ist nur zur Verwendung der regex -
|
Charakter versuchen, jede der Zeichenketten in Wörter Ihrer Series
(immer noch mitstr.contains
).Können Sie die regex-Konstrukt mit dem Beitritt der Wörter in
searchfor
mit|
:Als @AndyHayden darauf hingewiesen, in den Kommentaren unten, aufzupassen, wenn Ihre Zeichenketten Sonderzeichen wie
$
und^
was Sie wollen-match-buchstäblich. Diese Zeichen haben eine bestimmte Bedeutung im Kontext von regulären Ausdrücken und beeinflussen die passenden.Können Sie Ihre Liste von Teilstrings sicherer durch die Flucht nicht-alphanumerische Zeichen mit
re.escape
:Die Saiten mit in diese neue Liste wird jedem Zeichen buchstäblich, wenn verwendet mit
str.contains
.Können Sie
str.contains
allein mit einer regex-pattern mitOR (|)
:Oder man könnte hinzufügen, die Serie zu einem
dataframe
dann verwendenstr.contains
:Ausgabe: