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