es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo modificar la función apply y lambda para crear una nueva columna basada en otra en Python Pandas?

Tengo una tabla como la siguiente en Python Pandas con el tipo de dato float64:

col1
--------
245.121
NaN
44.908

Y trato de crear una nueva columna “col2” usando el siguiente código:

data["col2"] = data.apply(lambda x: 1 if x.col1 == np.nan else 0, axis=1)

Desafortunadamente, cuando uso el código anterior, obtengo 0 en todas partes, ¿por qué? ¿Cómo puedo modificar mi código para lograr algo como esto:

col1      col2
--------
245.121  | 0
NaN      | 1
44.908   | 0

¿Cómo puedo hacer eso en Python Pandas?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La razón por la salida inesperada es que los valores NaN no se pueden comparar con los operadores de igualdad “==” o “!=” en Python. Por lo tanto, el código “x.col1==np.nan” siempre dará como resultado False, y la función lambda devuelve 0 para todas las filas.

    Para obtener la salida deseada, puedes modificar el código de la siguiente manera:

    data["col2"] = data["col1"].apply(lambda x: 1 if pd.isna(x) else 0)
    

    Aquí, utilizamos el método “apply” en la columna “col1” para aplicar la función lambda a cada valor por separado. Comprobamos si el valor es NaN utilizando el método “pd.isna”, que devuelve True para NaN y False para todo lo demás. Luego, asignamos 1 a col2 si el valor es NaN y 0 en caso contrario.

    Con este código, deberías obtener la salida deseada:

        col1      col2
    0  245.121       0
    1      NaN       1
    2   44.908       0
    

Comments are closed.