2015-01-06 18 views
6

パンダでブール値テストを試したときに私はValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().を得続けました。それが何であるか理解していないので、私はそれを理解しようと決めた。パンダブール.any().all()

しかし、私はこの時点で完全に混乱しています。私は「あるために翻訳し

In [75]: 

import pandas as pd 

df = pd.DataFrame() 

df['x'] = [1,2,3] 
df['y'] = [3,4,5] 

今、私はすべてを試してみてください(yよりもX以下である)、:

ここで私は(3)それらの間で共有される単一のデータポイントで、二つの変数のデータフレームを作成しますxのすべての値がy "より小さくなり、意味が成り立たない答えが得られます。

In [79]: 

if all(df['x'] < df['y']): 
    print('True') 
else: 
    print('False') 
True 

次は私が任意のは、私が「yよりも小さいxのいずれかの値が」、と私は意味がありません別の答えを得る翻訳し、(X、Y未満である)してみてください。

In [77]: 

if any(df['x'] < df['y']): 
    print('True') 
else: 
    print('False') 
False 

要するに、any()とall()は実際に何をしていますか?

+0

を私は両方のケースで、真取得。これがあなたがテストしている例だと確信していますか? – Marcin

+1

ちょうど 'df ['x']

+1

あなたが観察したバグは再現できません。私にとっては 'if any(df ['x']

答えて

6

パンダは、Pythonインビルド関数ではなく、Seriesメソッドany()all()を使用することをお勧めします。

私はあなたが持っている奇妙な出力の元を理解していません(私は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 

これは印刷する必要があります:

True 
True 
関連する問題