Estoy buscando actualizar cualquier fecha mayor que la fecha máxima de Python:

display(df['maturity_date'].dtypes)

dtype('O')

display(df['maturity_date'].describe())

count                    3488
unique                    766
top       2166-09-23 00:00:00
freq                      130
Name: maturity_date, dtype: object


m = df['maturity_date'].str[:4].astype(int) > 2261

ValueError: cannot convert float NaN to integer

En este caso, parece que no hay ninguno, ¿es esta la razón por la que se genera el error? ¿Cómo puedo cambiar para que Pandas solo se actualice si la condición es verdadera? ¿Es mejor suprimir el error o manejarlo?

df['maturity_date'] = df['maturity_date'].mask(m, '2261' + df['maturity_date'].str[4:]) # for all dates greater than python max date replace
df['maturity_date'] = pd.to_datetime(df['maturity_date']) 
1
Peter Lucas 28 may. 2018 a las 13:30

1 respuesta

La mejor respuesta

Creo que necesito convertir a float, porque los valores faltantes de NaN so None s tienen el tipo float porque en pandas es imposible convertir NaN s a {{X5 }} por diseño:

m = df['maturity_date'].str[:4].astype(float) > 2261

Otra solución es eliminar las filas con NaN so None s primero:

df = df.dropna(subset=['maturity_date'])

Para comprobar las filas problemáticas, use:

df = df[df['maturity_date'].isnull()]
2
jezrael 28 may. 2018 a las 10:32