L'évaluation de pandas série de valeurs avec des expressions logiques et si-états

Je vais avoir de la difficulté à évaluer les valeurs d'un dictionnaire à l'aide des instructions if.

Donné le dictionnaire suivant, j'ai importé à partir d'un dataframe (dans le cas où c'est important):

>>> pnl[company]
29:   Active Credit       Date   Debit Strike Type
0      1      0 2013-01-08  2.3265  21.15  Put
1      0      0 2012-11-26      40     80  Put
2      0      0 2012-11-26     400     80  Put

J'ai essayé d'évaluer le texte suivant déclaration d'établir la valeur de la dernière valeur de Active:

if pnl[company].tail(1)['Active']==1:
    print 'yay'

Cependant,j'ai été confronté au message d'erreur suivant:

Traceback (most recent call last):
  File "<pyshell#69>", line 1, in <module>
    if pnl[company].tail(1)['Active']==1:
  File "/usr/lib/python2.7/dist-packages/pandas/core/generic.py", line 676, in __nonzero__
    .format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Cela m'a surpris, étant donné que j'ai pu montrer la valeur que j'ai voulu à l'aide de la commande ci-dessus sans l'instruction if:

>>> pnl[company].tail(1)['Active']
30: 2    0
Name: Active, dtype: object

Étant donné que la valeur est clairement zéro et l'indice est de 2, j'ai essayé ce qui suit, pour un bref contrôle de votre site et a constaté que les choses n'étaient pas passe que je l'aurais attendu:

>>> if pnl[company]['Active'][2]==0:
...     print 'woo-hoo'
... else:
...     print 'doh'


doh

Ma Question est:

1) Ce qui pourrait se passer ici? Je pense que je suis l'incompréhension de dictionnaires sur certains fondamentaux.

2) j'ai remarqué que comme je l'ai apporter toute valeur donnée de ce dictionnaire, le nombre sur la gauche augmente de 1. Que représente t-il? Par exemple:

>>> pnl[company].tail(1)['Active']
31: 2    0
Name: Active, dtype: object
>>> pnl[company].tail(1)['Active']
32: 2    0
Name: Active, dtype: object
>>> pnl[company].tail(1)['Active']
33: 2    0
Name: Active, dtype: object
>>> pnl[company].tail(1)['Active']
34: 2    0
Name: Active, dtype: object

Merci d'avance pour toute aide.

Ce n'est pas une question à propos des dictionnaires, mais sur les Pandas Series objets.
Cela semble être quelque chose de spécifique à la panda de la bibliothèque que vous utilisez. Il semble que les pandas fournit des objets d'une sorte de loi tels que des dictionnaires, mais diffèrent de façon importante. Pour être clair, vous n'êtes pas affaire avec Python habituel dictionnaires ici, mais en utilisant une structure de données fournies par les pandas qui a dictionnaire de la syntaxe.
Vous donner une série n'est pas un dictionnaire, comme telle, elle ne peut pas évaluer votre requête booléenne, comme l'erreur suggèrent que vous devez faire pnl[company].tail(1)['Active'].any()==1 même si c'est toujours une valeur unique
Quant à votre deuxième question, êtes-vous confus l'ordinal nombre de sortie? donc, si vous venez à plusieurs reprises ne imprimer "yay" ou print("bravo") (pour python 3) le nombre toujours incrément
Le fait que vous obtenez des erreurs telles que The truth value of a Series is ambiguous de l'intérieur les pandas de la bibliothèque de fichiers source.

OriginalL'auteur neanderslob | 2014-05-04