Pandy: wyszukaj ciąg znaków we wszystkich kolumnach dataframe


Możesz użyć poniższej składni, aby wyszukać konkretny ciąg w każdej kolumnie ramki DataFrame pandy i filtrować wiersze zawierające ciąg w co najmniej jednej kolumnie:

 #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 )]

Poniższy przykład pokazuje, jak zastosować tę składnię w praktyce.

Przykład: wyszukaj ciąg znaków we wszystkich kolumnach Pandas DataFrame

Załóżmy, że mamy następującą ramkę danych pand, która zawiera informacje o pierwszej i drugiej roli różnych koszykarzy w drużynie:

 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

Poniższy kod pokazuje, jak filtrować ramkę danych pand pod kątem wierszy, w których w dowolnej kolumnie pojawia się ciąg „Guard”:

 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

Należy zauważyć, że każdy wiersz wynikowej ramki DataFrame zawiera ciąg „Guard” w co najmniej jednej kolumnie.

Możesz także filtrować wiersze, w których w co najmniej jednej kolumnie pojawia się jeden z kilku ciągów, używając operatora „OR” ( | ) w pandach.

Na przykład poniższy kod pokazuje, jak filtrować wiersze, w których w co najmniej jednej kolumnie pojawia się „P Guard” lub „Centrum”:

 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

Należy zauważyć, że każdy wiersz wynikowej ramki danych zawiera „P Guard” lub „Center” w co najmniej jednej kolumnie.

Uwaga : Ważne jest, aby w funkcji include() uwzględnić argument na=False, w przeciwnym razie wystąpi błąd , jeśli w ramce danych znajdują się wartości NaN.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe operacje filtrowania w pandach:

Jak filtrować ramkę danych Pandas według wartości kolumn
Jak filtrować wiersze Pandas DataFrame według daty
Jak filtrować ramkę danych Pandas pod wieloma warunkami

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *