Pandas Boolean .any().all()

Ant*_*ton 16 python pandas

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()实际上做了什么?

Ser*_*kiy 8

熊猫建议您使用系列方法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)