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

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *