914 Stimmen

Pandas DataFrame nach Teilstring-Kriterien filtern

Ich habe ein Pandas DataFrame mit einer Spalte von String-Werten. Ich muss Zeilen basierend auf partiellen String-Übereinstimmungen auswählen.

So etwas wie diese Redewendung:

re.search(pattern, cell_in_question) 

einen booleschen Wert zurückgibt. Ich bin vertraut mit der Syntax von df[df['A'] == "hello world"] aber ich kann keine Möglichkeit finden, dasselbe mit einer teilweisen Zeichenkettenübereinstimmung zu tun, z. B. 'hello' .

5voto

Katu Punkte 1049

Die Verwendung von contains hat bei meiner Zeichenkette mit Sonderzeichen nicht gut funktioniert. Find funktionierte aber.

df[df['A'].str.find("hello") != -1]

5voto

Grant Shannon Punkte 3862

Ein allgemeineres Beispiel: Wenn Sie nach Wortteilen ODER bestimmten Wörtern in einer Zeichenfolge suchen:

df = pd.DataFrame([('cat andhat', 1000.0), ('hat', 2000000.0), ('the small dog', 1000.0), ('fog', 330000.0),('pet', 330000.0)], columns=['col1', 'col2'])

Bestimmte Teile eines Satzes oder Wortes:

searchfor = '.*cat.*hat.*|.*the.*dog.*'

Spalte erstellen, die die betroffenen Zeilen anzeigt (kann bei Bedarf jederzeit herausgefiltert werden)

df["TrueFalse"]=df['col1'].str.contains(searchfor, regex=True)

    col1             col2           TrueFalse
0   cat andhat       1000.0         True
1   hat              2000000.0      False
2   the small dog    1000.0         True
3   fog              330000.0       False
4   pet 3            30000.0        False

4voto

Serhii Kushchenko Punkte 520

Vielleicht möchten Sie nach einem Text in allen Spalten des Pandas-Datenrahmens suchen und nicht nur in einer Teilmenge davon. In diesem Fall wird der folgende Code helfen.

df[df.apply(lambda row: row.astype(str).str.contains('String To Find').any(), axis=1)]

Warnung. Diese Methode ist relativ langsam, wenn auch bequem.

3voto

rachwa Punkte 181

Ähnlich wie die Antwort von @cs95, aber hier müssen Sie keinen Motor angeben:

df.query('A.str.contains("hello").values')

3voto

usman Abbasi Punkte 59
df[df['A'].str.contains("hello", case=False)]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X