Avaliando valores de séries de pandas com expressões lógicas e instruções if
Estou tendo problemas para avaliar valores de um dicionário usando as instruções if.
Dado o seguinte dicionário, que importei de um dataframe (caso isso importe):
>>> 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
Tentei avaliar a seguinte declaração para estabelecer o valor do último valor deActive
:
if pnl[company].tail(1)['Active']==1:
print 'yay'
No entanto, fui confrontado pela seguinte mensagem de erro:
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().
Isso me surpreendeu, já que eu poderia exibir o valor desejado usando o comando acima sem a instrução if:
>>> pnl[company].tail(1)['Active']
30: 2 0
Name: Active, dtype: object
Dado que o valor é claramente zero e o índice é 2, tentei o seguinte para uma breve verificação de integridade e descobri que as coisas não estavam acontecendo como eu poderia esperar:
>>> if pnl[company]['Active'][2]==0:
... print 'woo-hoo'
... else:
... print 'doh'
doh
Minha pergunta é:
1) O que pode estar acontecendo aqui? Eu suspeito que estou entendendo mal os dicionários em algum nível fundamental.
2) Percebi que, ao exibir qualquer valor desse dicionário, o número à esquerda aumenta em 1. O que isso representa? Por exemplo:
>>> 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
Agradecemos antecipadamente por qualquer ajuda.