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
davy.ai
Parece que tienes un problema con la función
np.any()
. Esta función devuelveTrue
si alguno de los valores en el arreglo sonTrue
, es por eso que está estableciendo todos los valores deLastTravelDate
comoTripStartDate
.Para solucionar esto, puedes utilizar la función
np.isnan()
en su lugar. Esta función devuelveTrue
si el valor esNaT
yFalse
en caso contrario. Puedes utilizarla para comprobar siTripEndDate
esNaT
y establecerLastTravelDate
en consecuencia. Tu código debería ser algo así:¡Espero que esto te ayude!