diferencia entre "y" y "y" en pandas

Pregunta hecha: hace 10 meses Ultima actividad: hace 10 meses
up -1 down

Tengo algo de código que se ejecuta en un cron (a través de kubernetes) desde hace varios meses.

Ayer, parte de mi código no funcionaba que normalmente lo hace:

Esta declaración, de repente, no era 'True' (ambos df_temp y df_temp4 tienen datos en ellos:

if ( len(df_temp > 0) & len(df_temp4 > 0)):
    print "HERE"

sin embargo, esto funcionó:

if ( len(df_temp > 0) and len(df_temp4 > 0)):
    print "HERE"

¿Hubo algún tipo de empuje código que haría que este cambio? Dado que me he encontrado este código durante meses, no está seguro de lo que haría que esta declaración a fallar de repente.

4 respuestas

Quizás tu proyecto necesite tarjetas de vector libre. Nuestro sitio tiene mapas para todos los países.

Publicación patrocinada

up 2 down accepted

los len(df_temp > 0) y len(df_temp4 > 0) probablemente no hace lo que usted espera. Los operadores de comparación con pandas tramas de datos devuelven resultados elemento a elemento, eso significa que ellos crean una trama de datos boolean donde cada valor indica si el valor correspondiente en la trama de datos es mayor que cero:

>>> import pandas as pd
>>> df = pd.DataFrame({'a': [-1,0,1], 'b': [-1,0,1]})
>>> df
   a  b
0 -1 -1
1  0  0
2  1  1
>>> df > 0
       a      b
0  False  False
1  False  False
2   True   True

Entonces el len de df es la misma que la len de df > 0:

>>> len(df)
3
>>> len(df > 0)
3

diferencia entre "y" y "y"

Que significan cosas diferentes:

Ya que lo preguntas específicamente sobre los pandas (suponiendo que al menos un operando es una matriz NumPy, pandas de la serie, o trama de datos pandas):

  • & también se refiere a la "bit a bit y" elemento-sabia.
  • El elemento a elemento "lógico y" para los pandas no es and pero uno tiene que utilizar una función, es decir, numpy.logical_and.

Para una explicación más detallada se puede hacer referencia a "La diferencia entre 'y' (booleano) vs '&' (bit a bit) en Python. ¿Por qué la diferencia en el comportamiento con las listas vs matrices numpy?"

no está seguro de lo que haría que esta declaración a fallar de repente.

No ha proporcionado la "falla" ni el comportamiento esperado por lo que lamentablemente no puedo ayudar allí.

up 1 down

Tienen un comportamiento completamente diferente.
Cuando se utiliza &, Que está comparando los valores booleanos, pero cuando se utiliza and estás elemento lógico y dando cuenta. Yo sugiero que lea esta respuesta completa a aprender más.
operador lógico booleano para la indexación de pandas

up 0 down

Se ha sustituido aplicó erróneamente operador de bits & con adecuada lógico and operador.

En primer lugar, se debe utilizar and operador, porque lo que realmente quiere es una expresión lógica con los operadores lógicos.

bit a bit & operador fallado cuando las longitudes tenían ningún bit comunes.

Intente lo siguiente en Python.

True and 1 & 1
True and 1 & 2
up 0 down

Lógicamente las dos afirmaciones son diferentes. El operador de bits y indican. El Y indica una lógica y.