Cuando selecciono encadenando diferentes condiciones con "Y", la selección funciona bien. Cuando selecciono encadenando condiciones con "O" la selección arroja un error.
>>> import pandas as pd >>> import numpy as np >>> df = pd.DataFrame([[1,4,3],[2,3,5],[4,5,6],[3,2,5]], ... columns=['a', 'b', 'c']) >>> df abc 0 1 4 3 1 2 3 5 2 4 5 6 3 3 2 5 >>> df.loc[(df.a != 1) & (df.b < 5)] abc 1 2 3 5 3 3 2 5 >>> df.loc[(df.a != 1) or (df.b < 5)] Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3/dist-packages/pandas/core/generic.py", line 731, 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().Espero que devuelva el marco de datos completo ya que todas las filas cumplen esta condición.
Lo importante a tener en cuenta es que & no es idéntico a and ; son cosas diferentes por lo que el "o" equivalente a & es |
Normalmente tanto & como | son operadores lógicos bit a bit en lugar de los operadores "lógicos" de Python.
En pandas, estos operadores están sobrecargados para la operación en Series .
In [1]: import pandas as pd In [2]: import numpy as np In [3]: df = pd.DataFrame([[1,4,3],[2,3,5],[4,5,6],[3,2,5]], columns=['a', 'b', ...: 'c']) In [4]: df Out[4]: abc 0 1 4 3 1 2 3 5 2 4 5 6 3 3 2 5 In [5]: df.loc[(df.a != 1) & (df.b < 5)] Out[5]: abc 1 2 3 5 3 3 2 5 In [6]: df.loc[(df.a != 1) | (df.b < 5)] Out[6]: abc 0 1 4 3 1 2 3 5 2 4 5 6 3 3 2 5