Panda: cerca una stringa in tutte le colonne di dataframe
È possibile utilizzare la seguente sintassi per cercare una stringa particolare in ciascuna colonna di un DataFrame panda e filtrare le righe contenenti la stringa in almeno una colonna:
#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 )]
L’esempio seguente mostra come utilizzare questa sintassi nella pratica.
Esempio: cerca una stringa in tutte le colonne di Pandas DataFrame
Supponiamo di avere il seguente DataFrame panda che contiene informazioni sul primo e sul secondo ruolo di vari giocatori di basket in una squadra:
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
Il codice seguente mostra come filtrare il DataFrame panda per le righe in cui appare la stringa “Guard” in qualsiasi colonna:
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
Tieni presente che ogni riga del DataFrame risultante contiene la stringa “Guard” in almeno una colonna.
Puoi anche filtrare le righe in cui una delle numerose stringhe appare in almeno una colonna utilizzando l’operatore “OR” ( | ) in panda.
Ad esempio, il codice seguente mostra come filtrare le righe in cui appare “P Guard” o “Center” in almeno una colonna:
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
Tieni presente che ogni riga nel DataFrame risultante contiene “P Guard” o “Center” in almeno una colonna.
Nota : è importante includere l’argomento na=False nella funzione contiene() altrimenti riscontrerai un errore se i valori NaN sono presenti nel DataFrame.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre operazioni di filtro comuni nei panda:
Come filtrare un Pandas DataFrame in base ai valori delle colonne
Come filtrare le righe Pandas DataFrame per data
Come filtrare un Pandas DataFrame su più condizioni