machinery
machinery

Reputation: 6290

Testing if value is contained in Pandas Series with mixed types

I have a pandas series, for example: x = pandas.Series([-1,20,"test"]).

Now I would like to test if -1 is contained in x without looping over the whole series. I could transform the whole series to string and then test if "-1" in x but sometimes I have -1.0 and sometime -1 and so on, so this is not a good choice.

Is there another possibility to approach this?

Upvotes: 1

Views: 104

Answers (3)

Scott Boston
Scott Boston

Reputation: 153460

I think you can do something like this to handle data that appears to be string-like and integer-like. Pandas Series are all a single datatype.

x = pd.Series([-1,20,"test","-1.0"])

print(x)

0      -1
1      20
2    test
3    -1.0
dtype: object

(pd.to_numeric(x, errors='coerce') == -1).sum()

Note: Any value that can cast into a number will return NaN.

Output

2

If you just want to see if a -1 appears in x then you can use

(pd.to_numeric(x, errors='coerce') == -1).sum() > 0

Output:

True

Upvotes: 1

harpan
harpan

Reputation: 8631

x.isin([-1])

Gives me:

0     True
1    False
2    False
dtype: bool

You can refer to docs for more info.

Upvotes: 1

Troy D
Troy D

Reputation: 2245

What about

x.isin([-1])

output:

0     True
1    False
2    False
dtype: bool

Or if you want to have a count of how many instances:

x.isin([-1]).sum()

Output:

1

Upvotes: 2

Related Questions