Pandas Boolean .any () .all ()

Я продолжал получать ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). при попытке булевых тестов с помощью pandas. Не понимая, что он сказал, я решил попытаться понять это.

Тем не менее, я совершенно смущен в этот момент.

Здесь я создаю dataframe двух переменных, с единой точкой данных, разделяемой между ними (3):

 In [75]: import pandas as pd df = pd.DataFrame() df['x'] = [1,2,3] df['y'] = [3,4,5] 

Теперь я пробую все (x меньше y), который я переводил на «все значения x меньше y», и я получаю ответ, который не имеет смысла.

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

Затем я попробую any (is x less than y), который я перевешу на «любое значение x меньше y», и я получаю еще один ответ, который не имеет смысла.

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

Короче: что делает () и все () на самом деле?

Pandas предлагает вам использовать методы Series any() и all() , а не встроенные функции Python.

Я не совсем понимаю источник странного вывода, который у вас есть (я получаю True в обоих случаях в Python 2.7 и Pandas 0.17.0). Но попробуйте следующее, оно должно работать. Это использует 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