Hoe pandas dataframe te filteren met behulp van booleaanse kolommen
U kunt de volgende methoden gebruiken om rijen in een Panda DataFrame te filteren op basis van Booleaanse kolomwaarden:
Methode 1: Filter het DataFrame op basis van een Booleaanse kolom
#filter for rows where value in 'my_column' is True df. loc [df. my_column ]
Methode 2: Filter het DataFrame op basis van meerdere Booleaanse kolommen
#filter for rows where value in 'column1' or 'column2' is True df. loc [df. column1 | df. column2 ]
De volgende voorbeelden laten zien hoe u elke methode in de praktijk kunt gebruiken met de volgende panda’s DataFrame:
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
Voorbeeld 1: Filter het DataFrame op basis van een Booleaanse kolom
We kunnen de volgende syntaxis gebruiken om het panda’s DataFrame te filteren zodat het alleen rijen bevat waarvan de waarde in de all_star- kolom True is:
#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
Houd er rekening mee dat het DataFrame is gefilterd om alleen rijen te bevatten waarvan de waarde in de all_star- kolom True is.
Als u in plaats daarvan rijen wilt filteren waarin all_star False is, typt u eenvoudigweg een tilde ( ~ ) vóór de kolomnaam:
#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
Het DataFrame is nu gefilterd zodat het alleen rijen bevat waarvan de waarde in de all_star- kolom False is.
Voorbeeld 2: Filter het DataFrame op basis van meerdere Booleaanse kolommen
We kunnen de volgende syntaxis gebruiken om het panda’s DataFrame te filteren zodat het alleen rijen bevat waarin de waarde van de all_star- kolom of de startkolom True is:
#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
Houd er rekening mee dat het DataFrame is gefilterd om alleen rijen te bevatten waarvan de waarde in de all_star- of starter- kolom True is.
Als u rijen wilt filteren waarvan de waarde in de kolommen all_star en starter True is, kunt u de operator & gebruiken in plaats van | exploitant:
#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
Nu is het DataFrame gefilterd zodat het alleen rijen bevat waarvan de waarde in de kolommen all_star en starter True is.
Gerelateerd: Het verschil tussen loc en iloc bij Pandas
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken in panda’s kunt uitvoeren:
Panda’s: selecteer rijen uit DataFrame met behulp van een Booleaanse reeks
Panda’s: hoe u een Booleaanse kolom maakt op basis van een voorwaarde
Panda’s: Booleaanse waarden converteren naar gehele waarden