A resposta correta do exercício é
selecao = (alunos.Aprovado == True) & (alunos.Sexo == 'F')
aprovadas = alunos[selecao]
aprovadas
Porém, por que a alternativa A não funciona?
selecao = (alunos.Sexo == 'F') and (alunos.Aprovado == True)
aprovadas = alunos[selecao]
aprovadas
A alternativa A resulta em:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_19952/1708169799.py in <module>
----> 1 select = (alunos.Sexo == 'F') and (alunos.Aprovado == True)
~\anaconda3\lib\site-packages\pandas\core\generic.py in __nonzero__(self)
1535 @final
1536 def __nonzero__(self):
-> 1537 raise ValueError(
1538 f"The truth value of a {type(self).__name__} is ambiguous. "
1539 "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().
Sei que os operadores &/| são bit a bit e and/or são os operadores lógicos. Para dataframes, é bem mais eficiente/rápido utilizar &/|. Mas por que and/or resulta em erro de compilação? Penso que deveria funcionar da mesma forma (porém mais lento).