web-dev-qa-db-fra.com

Supprime les lignes contenant "False" dans une colonne de trame de données pandas

Je suppose que c'est une solution facile et je ne suis pas sûr de ce que je manque. J'ai un cadre de données en tant que tel:

         index               c1       c2         c3
2015-03-07 01:27:05        False    False       True   
2015-03-07 01:27:10        False    False       True   
2015-03-07 01:27:15        False    False       False   
2015-03-07 01:27:20        False    False       True   
2015-03-07 01:27:25        False    False       False   
2015-03-07 01:27:30        False    False       True   

Je souhaite supprimer toutes les lignes contenant False dans c3. c3 est un dtype=bool. Je rencontre régulièrement des problèmes car c'est un booléen et non une chaîne/int/etc, je ne l'avais pas géré auparavant.

Merci pour toute aide!

5
MB_analyst

Les pandas traitent les booléens de manière très nette et simple:

df = df[df.c3]

Lorsque vous filtrez des images avec df[...], vous écrivez souvent une fonction qui renvoie une valeur booléenne (telle que df.x > 2). Mais dans ce cas, puisque la colonne est déjà un booléen, vous pouvez simplement insérer df.c3 seul, ce qui vous donnera toutes les lignes qui sont True

Si vous voulez obtenir le contraire (comme le titre original de votre question l'indique), vous pouvez utiliser df[~df.c3], où ~ inverse les booléens.

Pour plus d'informations sur l'indexation booléenne dans les pandas, voir docs .

17
ASGM

Bien le titre de la question et la question elle-même sont exactement le contraire, mais:

df = df[df['c3'] == True]  # df will have only rows with True in c3
6
DeepSpace

Solution

df.drop(df[df['c3'] == False].index, inplace=True)

Cela supprime explicitement les lignes où 'c3' est False et ne garde pas que les lignes évaluées à True

1
piRSquared