replacing - Reemplazando Pandas o Numpy Nan con una None para usar con MysqlDB
replace values dataframe column pandas (4)
@bogatron lo tiene claro, puedes usarlo, vale la pena señalar que puedes hacerlo de forma nativa en pandas:
df1 = df.where((pd.notnull(df)), None)
Nota: esto cambia la dtype de todas las columnas para object
.
Ejemplo:
In [1]: df = pd.DataFrame([1, np.nan])
In [2]: df
Out[2]:
0
0 1
1 NaN
In [3]: df1 = df.where((pd.notnull(df)), None)
In [4]: df1
Out[4]:
0
0 1
1 None
Nota: lo que no puede hacer es refundir el tipo de dtype
para permitir todos los tipos de tipos de datos, usando astype
, y luego el método DataFrame fillna
:
df1 = df.astype(object).replace(np.nan, ''None'')
Lamentablemente, ni esto, ni el uso de replace
, funciona con None
vea este problema (cerrado) .
Como comentario, vale la pena señalar que para la mayoría de los casos de uso no es necesario reemplazar NaN por Ninguno, consulte esta pregunta sobre la diferencia entre NaN y None en pandas .
Sin embargo, en este caso específico, parece que sí (al menos en el momento de esta respuesta).
Estoy intentando escribir un marco de datos de Pandas (o puedo usar una matriz numpy) en una base de datos mysql usando MysqlDB. MysqlDB no parece entender ''nan'' y mi base de datos arroja un error al decir que nan no está en la lista de campos. Necesito encontrar una manera de convertir el ''nan'' en un NoneType.
¿Algunas ideas?
Bastante viejo, sin embargo, me encontré con el mismo problema. Intenta hacer esto:
df[''col_replaced''] = df[''col_with_npnans''].apply(lambda x: None if np.isnan(x) else x)
Después de tropezar, esto funcionó para mí:
df = df.astype(object).where(pd.notnull(df),None)
Puedes reemplazar nan
con None
en tu numpy array:
>>> x = np.array([1, np.nan, 3])
>>> y = np.where(np.isnan(x), None, x)
>>> print y
[1.0 None 3.0]
>>> print type(y[1])
<type ''NoneType''>