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.

Utilizando isna() como condición en una declaración if else.

Tengo un df que se ve así con muchas más filas:

LastTravelDate TripStartDate TripEndDate
2021-07-10 2021-08-16 NaT
2021-08-28 2021-09-30 NaT
2021-07-29 2021-09-27 2021-09-28

Estoy tratando de escribir un bucle que recorra cada fila en el df y establezca el valor i-ésimo de LastTravelDate igual al valor i-ésimo de TripEndDate. Donde sea que TripEndDate sea igual a NaT, me gustaría que el script establezca el valor i-ésimo de LastTravelDate en el valor correspondiente en TripStartDate.

Mi problema es que el código parece ignorar todos los detalles en la declaración if/else y solo configura todas las df.LastTravelDate igual a df.TripStartDate. Lo que debería suceder es que df.LastTravelDate y df.TripStartDate solo sean iguales donde df.TripEndDate es nulo. Sin embargo, estos se vuelven iguales en cada instancia. A continuación, se muestra el código completo que estoy usando.

for i in range(df.shape[0]): 
    if np.any(df.loc[df.TripEndDate.isna()]):
        df["LastTravelDate"][i] = df.TripStartDate[i]
    else:
        df["LastTravelDate"][i] = df.TripEndDate[i]

Gracias

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que tienes un problema con la función np.any(). Esta función devuelve True si alguno de los valores en el arreglo son True, es por eso que está estableciendo todos los valores de LastTravelDate como TripStartDate.

    Para solucionar esto, puedes utilizar la función np.isnan() en su lugar. Esta función devuelve True si el valor es NaT y False en caso contrario. Puedes utilizarla para comprobar si TripEndDate es NaT y establecer LastTravelDate en consecuencia. Tu código debería ser algo así:

    for i in range(df.shape[0]): 
        if np.isnan(df.TripEndDate[i]):
            df["LastTravelDate"][i] = df.TripStartDate[i]
        else:
            df["LastTravelDate"][i] = df.TripEndDate[i]
    

    ¡Espero que esto te ayude!

Comments are closed.