16

This pandas python code generates the error message,

"TypeError: bad operand type for unary ~: 'float'"

I have no idea why because I'm trying to manipulate a str object

df_Anomalous_Vendor_Reasons[~df_Anomalous_Vendor_Reasons['V'].str.contains("File*|registry*")] #sorts, leaving only cases where reason is NOT File or Registry

Anybody got any ideas?

8
  • Can you post what happens with df_Anomalous_Vendor_Reasons['V'].str.contains("File*|registry*"), also do you need the asterisks here? Commented Jul 31, 2015 at 11:55
  • I can't seem to reproduce. Can you post df_Anomalous_Vendor_Reasons.to_msgpack() for us? Commented Jul 31, 2015 at 12:08
  • @MikeGraham: are you sure about that? regex=True is the default for str.contains in 0.16.2, anyway, and it seems to have used a regex compile for years. Commented Jul 31, 2015 at 12:56
  • 3
    Could it be something as simple as I have Nan values in my df? Commented Jul 31, 2015 at 13:22
  • 1
    Ok it was that. Sorry, I'm very new - I've been doing this a month and I've launched into pandas with no background even in python - so I need a lot of help Commented Jul 31, 2015 at 13:42

1 Answer 1

36

Credit to Davtho1983 comment above, I thought I'd add color to the comment for clarity.

For anyone stumbling on this later with the same error (like me). It's a very simple fix. The documentation from pandas shows

Series.str.contains(pat, case=True, flags=0, na=nan, regex=True)

What's happening is the contains() method isn't being applied to na values in the DataFrame, they will remain na. You just need to fill na values with Boolean values so you may use the invert operator ~ .

With the example above one should use

df_Anomalous_Vendor_Reasons[~df_Anomalous_Vendor_Reasons['V'].str.contains("File*|registry*", na=False)]

Of course one should choose False or True for the na argument based on intended logic. Whichever Boolean value you choose for filling na will be inverted.

Sign up to request clarification or add additional context in comments.

2 Comments

goooood answer - i was quite confused by this
Tremendous Answer

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.