Tengo un df, y quiero ejecutar algo como:

subsetdf= df.loc[(df['Item_Desc'].str.contains('X')==True) or \
                 (df['Item_Desc'].str.contains('Y')==True ),:]

que selecciona todas las filas que tienen el Elemento Descripción de la columna de una subcadena de «X» o «Y».

The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

Me sale el error al ejecutar. Alguna ayuda?

OriginalEl autor wolfsatthedoor | 2014-08-31

2 Comentarios

  1. 7

    Uso | en lugar de or. Así:

    df.loc[(cond1) | (cond2), :]

    La or operador quiere comparar dos valores booleanos (o dos, expresión que se evalúe a True o False). Pero una Serie (o numpy matriz) no se evalúa a Verdadero o Falso, y en este caso queremos comparar ambas series elemento sabio. Para ello se puede utilizar |, que se llama «bit a bit o’.

    Pandas sigue aquí la numpy convenciones. Ver aquí en la pandas docs para una explicación sobre el mismo.

    ¿Te importaría que me apunta a la documentación? Es este un pandas cosa o python cosa? No pude encontrar nada sobre el «|»
    bonita respuesta. Es que hay forma más general? por ejemplo, si usted tiene una lista de nombres de columna, por ejemplo, ['d1', 'd2', 'd3' ...] hay una manera especificando una condición común que se aplique a todos e incluir la fila si alguna de ellas coincide. En mi caso los cols d1 etc tienen 1 o 0, y queremos sólo las filas con un 1 en cualquiera de los cols d1 etc. Hay otros cols, con otros datos, por ejemplo texto, que no estoy teniendo en cuenta para esta selección
    No es una solución general, pero en ese caso se podría hacer algo como (df[cols] == 1).any(axis=1) utilizar como condición.

    OriginalEl autor joris

  2. 2

    La condición debe ser como sigue

    df.loc[(cond1) | (cond2)]

    Cada condición tiene que ser encerrada en paréntesis así. Se da gran prioridad de los paréntesis que el bit a bit ‘O’ operador. Cuando el paréntesis no son proporcionados también daría el mismo error

    OriginalEl autor Praveen Gupta Sanka

Dejar respuesta

Please enter your comment!
Please enter your name here