Solución:
@bogatron lo tiene bien, puedes usar where
, vale la pena señalar que puede hacer esto de forma nativa en pandas:
df1 = df.where(pd.notnull(df), None)
Nota: esto cambia el tipo 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 los DataFrames dtype
para permitir todos los tipos de tipos de datos, usando astype
y luego el DataFrame fillna
método:
df1 = df.astype(object).replace(np.nan, 'None')
Desafortunadamente, ni esto, ni el uso replace
, funciona con None
vea este problema (cerrado).
Además, vale la pena señalar que para la mayoría de los casos de uso no es necesario reemplazar NaN con None, 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).
df = df.replace({np.nan: None})
El crédito es para este tipo aquí en este problema de Github.
Puedes reemplazar nan
con None
en su matriz numpy:
>>> 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'>