ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().在尝试使用pandas进行布尔测试时,我不断得到.不明白它说的是什么,我决定试图解决它.
但是,我在这一点上完全感到困惑.
在这里,我创建了两个变量的数据框,它们之间共享一个数据点(3):
In [75]:
import pandas as pd
df = pd.DataFrame()
df['x'] = [1,2,3]
df['y'] = [3,4,5]
Run Code Online (Sandbox Code Playgroud)
现在我尝试所有(x小于y),我将其翻译为"x小于y的所有值",并得到一个没有意义的答案.
In [79]:
if all(df['x'] < df['y']):
print('True')
else:
print('False')
True
Run Code Online (Sandbox Code Playgroud)
接下来我尝试任何(x小于y),我将其翻译为"x小于y的任何值",我得到另一个没有意义的答案.
In [77]:
if any(df['x'] < df['y']):
print('True')
else:
print('False')
False
Run Code Online (Sandbox Code Playgroud)
简而言之:any()和all()实际上做了什么?
熊猫建议您使用系列方法any()和all(),而不是Python中,构建功能.
我不太了解你所拥有的奇怪输出的来源(在Python 2.7和Pandas 0.17.0中我都得到了True).但尝试以下,它应该工作.这种用法Series.any()和Series.all()方法.
import pandas as pd
df = pd.DataFrame()
df['x'] = [1,2,3]
df['y'] = [3,4,5]
print (df['x'] < df['y']).all() # more pythonic way of
print (df['x'] < df['y']).any() # doing the same thing
Run Code Online (Sandbox Code Playgroud)
这应该打印:
True
True
Run Code Online (Sandbox Code Playgroud)