2015-01-06 18 views
6

Tôi tiếp tục nhận được ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). khi thử các thử nghiệm boolean với gấu trúc. Không hiểu nó nói gì, tôi quyết định tìm ra nó.Pandas Boolean .any() .all()

Tuy nhiên, tôi hoàn toàn bối rối vào thời điểm này.

Ở đây tôi tạo ra một dataframe của hai biến, với một điểm dữ liệu duy nhất chia sẻ giữa chúng (3):

In [75]: 

import pandas as pd 

df = pd.DataFrame() 

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

Bây giờ tôi thử tất cả (là x ít hơn y), mà tôi dịch để "là tất cả các giá trị của x nhỏ hơn y "và tôi nhận được câu trả lời không có ý nghĩa.

In [79]: 

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

Tiếp theo tôi thử bất kỳ (nhỏ hơn y), mà tôi dịch là "có giá trị nhỏ hơn y" và tôi nhận được câu trả lời khác không có ý nghĩa.

In [77]: 

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

Tóm lại: bất kỳ() và tất cả() thực sự làm gì?

+0

tôi nhận được đúng trong cả hai trường hợp. Bạn có chắc đây là ví dụ bạn đang thử nghiệm không? – Marcin

+1

Hãy xem chỉ 'df [' x ']

+1

Tôi không thể tạo lại lỗi mà bạn quan sát. Đối với tôi, 'if any (df ['x']

Trả lời

6

Pandas đề xuất bạn sử dụng các phương pháp Chuỗi any()all(), không phải chức năng xây dựng trong Python.

Tôi không hiểu rõ nguồn gốc của đầu ra lạ mà bạn có (Tôi nhận được True trong cả hai trường hợp trong Python 2.7 và Pandas 0.17.0). Nhưng hãy thử như sau, nó sẽ hoạt động. Điều này sử dụng phương pháp 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 

này nên in:

True 
True 
Các vấn đề liên quan