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

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert