I assume this is an easy fix and I'm not sure what I'm missing. I have a data frame as such:
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
I want to remove any rows that contain False
in c3
. c3
is a dtype=bool
. I'm consistently running into problems since it's a boolean and not a string/int/etc, I haven't handled that before.
Pandas deals with booleans in a really neat, straightforward manner:
df = df[df.c3]
This does the same thing but without creating a copy (making it faster):
df = df.loc[df.c3, :]
When you're filtering dataframes using df[...]
, you often write some function that returns a boolean value (like df.x > 2
). But in this case, since the column is already a boolean, you can just put df.c3
in on its own, which will get you all the rows that are True
.
If you wanted to get the opposite (as the original title to your question implied), you could use df[~df.c3]
or df.loc[~df.c3, :]
, where the ~
inverts the booleans.
For more on boolean indexing in Pandas, see the docs. Thanks to @Mr_and_Mrs_D for the suggestion about .loc
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With