Here is a small demo, which shows why this is happenning:
In [131]: df = pd.DataFrame(np.random.randint(0,20,(5,2)), columns=list('AB'))
In [132]: df
Out[132]:
A B
0 3 11
1 0 16
2 16 1
3 2 11
4 18 15
In [133]: res = df['A'] > 10
In [134]: res
Out[134]:
0 False
1 False
2 True
3 False
4 True
Name: A, dtype: bool
when we try to check whether such Series is True
- Pandas doesn't know what to do:
In [135]: if res:
...: print(df)
...:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
...
skipped
...
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Workarounds:
we can decide how to treat Series of boolean values - for example if
should return True
if all values are True
:
In [136]: res.all()
Out[136]: False
or when at least one value is True:
In [137]: res.any()
Out[137]: True
In [138]: if res.any():
...: print(df)
...:
A B
0 3 11
1 0 16
2 16 1
3 2 11
4 18 15
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…