Pandas: suchen sie in allen spalten von dataframe nach einer zeichenfolge
Sie können die folgende Syntax verwenden, um in jeder Spalte eines Pandas-DataFrames nach einer bestimmten Zeichenfolge zu suchen und nach Zeilen zu filtern, die die Zeichenfolge in mindestens einer Spalte enthalten:
#define filter mask = np. column_stack ([df[col]. str . contains (r " my_string ", na= False ) for col in df]) #filter for rows where any column contains 'my_string' df. loc [mask. any (axis= 1 )]
Das folgende Beispiel zeigt, wie diese Syntax in der Praxis verwendet wird.
Beispiel: Suche nach einer Zeichenfolge in allen Spalten von Pandas DataFrame
Angenommen, wir haben den folgenden Pandas-DataFrame, der Informationen über die erste und zweite Rolle verschiedener Basketballspieler in einem Team enthält:
import pandas as pd #createDataFrame df = pd. DataFrame ({' player ': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'], ' first_role ': ['P Guard', 'P Guard', 'S Guard', 'S Forward', 'P Forward', 'Center', 'Center', 'Center'], ' second_role ': ['S Guard', 'S Guard', 'Forward', 'S Guard', 'S Guard', 'S Forward', 'P Forward', 'P Forward']}) #view DataFrame print (df) player first_role second_role 0 AP Guard S Guard 1 BP Guard S Guard 2 CS Guard Forward 3DS Forward S Guard 4 EP Forward S Guard 5 F Center S Forward 6 G Center P Forward 7 H Center P Forward
Der folgende Code zeigt, wie der Pandas-DataFrame nach Zeilen gefiltert wird, in denen die Zeichenfolge „Guard“ in einer beliebigen Spalte erscheint:
import numpy as np
#define filter
mask = np. column_stack ([df[col]. str . contains (r " Guard ", na= False ) for col in df])
#filter for rows where any column contains 'Guard'
df. loc [mask. any (axis= 1 )]
player first_role second_role
0 A P Guard S Guard
1 B P Guard S Guard
2 C S Guard Forward
3 D S Forward S Guard
4 E P Forward S Guard
Beachten Sie, dass jede Zeile des resultierenden DataFrame die Zeichenfolge „Guard“ in mindestens einer Spalte enthält.
Sie können auch Zeilen filtern, in denen eine von mehreren Zeichenfolgen in mindestens einer Spalte vorkommt, indem Sie in Pandas den „OR“-Operator ( | ) verwenden.
Der folgende Code zeigt beispielsweise, wie Zeilen gefiltert werden, in denen „P Guard“ oder „Center“ in mindestens einer Spalte vorkommt:
import numpy as np
#define filter
mask = np. column_stack ([df[col]. str . contains (r " P Guard|Center ", na= False ) for col in df])
#filter for rows where any column contains 'P Guard' or 'Center'
df. loc [mask. any (axis= 1 )]
player first_role second_role
0 A P Guard S Guard
1 B P Guard S Guard
5 F Center S Forward
6 G Center P Forward
7 H Center P Forward
Beachten Sie, dass jede Zeile im resultierenden DataFrame „P Guard“ oder „Center“ in mindestens einer Spalte enthält.
Hinweis : Es ist wichtig, das Argument „na=False“ in die Funktion „contain()“ aufzunehmen. Andernfalls tritt ein Fehler auf, wenn NaN-Werte im DataFrame vorhanden sind.
Zusätzliche Ressourcen
In den folgenden Tutorials wird erläutert, wie andere gängige Filtervorgänge in Pandas durchgeführt werden:
So filtern Sie einen Pandas DataFrame nach Spaltenwerten
So filtern Sie Pandas DataFrame-Zeilen nach Datum
So filtern Sie einen Pandas DataFrame nach mehreren Bedingungen