官方文档10分钟入门pandas最后给出了这么一个错误代码:
错误代码:
>>> 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 后跟的判定条件即Series对象它有长度,因此按道理应该判定为True,但是在series中存在False的值,因此按道理又应该判定为False。。。
因此,不管是true还是false,这个if条件是矛盾的,是描述不清楚的,因此会抛出错误信息。
解决方法:
正如错误信息所示,应该用一个清楚的方法来判定Series对象的状态,比如a.empty, a.any() or a.all().例如,如果你想判断Series对象是否为空,那么应该这么写:
>>> if pd.Series([False, True, False]) is not None:
... print('i am not none')
如果你想判断Series中存不存在True,那么可以这么写:
>>> if pd.Series([False, True, False]).any():
... print('any of the series is true')
如果你想判断pandas单元素对象中的值的布尔情况,则如下代码所示:
In [11]: pd.Series([True]).bool()
Out[11]: True
In [12]: pd.Series([False]).bool()
Out[12]: False
In [13]: pd.DataFrame([[True]]).bool()
Out[13]: True
In [14]: pd.DataFrame([[False]]).bool()
Out[14]: False