Caveats and Gotchas¶
Using If/Truth Statements with pandas¶
pandas follows the numpy convention of raising an error when you try to convert something to a bool.
This happens in a if or when using the boolean operations, and, or, or not. It is not clear
what the result of
>>> if pd.Series([False, True, False]):
...
should be. Should it be True because it’s not zero-length? False because there are False values?
It is unclear, so instead, pandas raises a ValueError:
>>> if pd.Series([False, True, False]):
print("I was true")
Traceback
...
ValueError: The truth value of an array is ambiguous. Use a.empty, a.any() or a.all().
If you see that, you need to explicitly choose what you want to do with it (e.g., use any(), all() or empty).
or, you might want to compare if the pandas object is None
>>> if pd.Series([False, True, False]) is not None:
print("I was not None")
>>> I was not None
or return if any value is True.
>>> if pd.Series([False, True, False]).any():
print("I am any")
>>> I am any
To evaluate single-element pandas objects in a boolean context, use the method .bool():
In [1]: pd.Series([True]).bool()
Out[1]: True
In [2]: pd.Series([False]).bool()