2015-01-06 4 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()

그러나이 시점에서 나는 완전히 혼란 스럽습니다. 여기

내가 그들 사이에 공유 단일 데이터 포인트, 두 변수의 dataframe를 작성 (3) : 이제

In [75]: 

import pandas as pd 

df = pd.DataFrame() 

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

나는 모든 시도 나는 "이다 번역하는 (Y보다 X 이하이다) 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 ('df [ 'y']) : print ('True')'는'True'를 출력합니다. 중간 문장에서 이상한 일을하고있을 수도 있습니다. "진실의 순간"에'print (df [ 'x'], df [ 'y'], df [ 'x']

답변

6

팬더는 Python 빌드 기능이 아닌 시리즈 메소드 any()all()을 사용하기를 제안합니다.

나는 이상한 결과물의 출처를 알지 못합니다 (파이썬 2.7과 팬더 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 
관련 문제