Come filtrare pandas dataframe utilizzando colonne booleane
È possibile utilizzare i seguenti metodi per filtrare le righe in un DataFrame panda in base ai valori booleani delle colonne:
Metodo 1: filtra DataFrame in base a una colonna booleana
#filter for rows where value in 'my_column' is True df. loc [df. my_column ]
Metodo 2: filtra DataFrame in base a più colonne booleane
#filter for rows where value in 'column1' or 'column2' is True df. loc [df. column1 | df. column2 ]
I seguenti esempi mostrano come utilizzare ciascun metodo nella pratica con i seguenti DataFrame panda:
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E', 'F', 'G'], ' points ': [18,20, 25, 40, 34, 32, 19], ' all_star ': [True, False, True, True, True, False, False], ' starter ': [False, True, True, True, False, False, False]}) #view DataFrame print (df) team points all_star starter 0 A 18 True False 1 B 20 False True 2 C 25 True True 3 D 40 True True 4 E 34 True False 5 F 32 False False 6 G 19 False False
Esempio 1: filtra il DataFrame in base a una colonna booleana
Possiamo utilizzare la seguente sintassi per filtrare il DataFrame panda in modo che contenga solo righe in cui il valore nella colonna all_star è True:
#filter for rows where 'all_star' is True df. loc [df. all_star ] team points all_star starter 0 A 18 True False 2 C 25 True True 3 D 40 True True 4 E 34 True False
Tieni presente che DataFrame è stato filtrato per contenere solo righe il cui valore nella colonna all_star è True.
Se invece vuoi filtrare le righe in cui all_star è False, digita semplicemente una tilde ( ~ ) davanti al nome della colonna:
#filter for rows where 'all_star' is False df. loc [ ~ df. all_star ] team points all_star starter 1 B 20 False True 5 F 32 False False 6 G 19 False False
Il DataFrame è stato ora filtrato per contenere solo righe il cui valore nella colonna all_star è False.
Esempio 2: filtra il DataFrame in base a più colonne booleane
Possiamo utilizzare la seguente sintassi per filtrare il DataFrame panda in modo che contenga solo righe in cui il valore della colonna all_star o della colonna iniziale è True:
#filter for rows where 'all_star' or 'starter' is True df. loc [df. all_star | df. starter ] team points all_star starter 0 A 18 True False 1 B 20 False True 2 C 25 True True 3 D 40 True True 4 E 34 True False
Tieni presente che DataFrame è stato filtrato per contenere solo righe il cui valore nella colonna all_star o starter è True.
Se desideri filtrare le righe il cui valore nelle colonne all_star e starter è True, puoi utilizzare l’operatore & invece di | operatore:
#filter for rows where 'all_star' and 'starter' is True df. loc [df. all_star & df. starter ] team points all_star starter 2 C 25 True True 3 D 40 True True
Ora il DataFrame è stato filtrato per contenere solo le righe in cui il valore nelle colonne all_star e starter è True.
Correlati: la differenza tra loc e iloc su Pandas
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre attività comuni nei panda:
Panda: seleziona le righe da DataFrame utilizzando una serie booleana
Panda: come creare una colonna booleana basata sulla condizione
Panda: come convertire valori booleani in valori interi