values - replace nan with 0 in python
¿Cómo reemplazar valores con None en el marco de datos de Pandas en Python? (3)
De hecho, en las versiones posteriores de los pandas esto dará un TypeError:
df.replace(''-'', None)
TypeError: If "to_replace" and "value" are both None then regex must be a mapping
Puedes hacerlo pasando una lista o un diccionario:
In [11]: df.replace(''-'', df.replace([''-''], [None]) # or .replace(''-'', {0: None})
Out[11]:
0
0 None
1 3
2 2
3 5
4 1
5 -5
6 -1
7 None
8 9
Pero recomiendo usar NaN en lugar de None:
In [12]: df.replace(''-'', np.nan)
Out[12]:
0
0 NaN
1 3
2 2
3 5
4 1
5 -5
6 -1
7 NaN
8 9
¿Hay algún método para reemplazar valores con None
en Pandas en Python?
Puede usar df.replace(''pre'', ''post'')
y puede reemplazar un valor por otro, pero esto no se puede hacer si desea reemplazar con None
value, que si lo intenta, obtiene un resultado extraño.
Así que aquí hay un ejemplo:
df = DataFrame([''-'',3,2,5,1,-5,-1,''-'',9])
df.replace(''-'', 0)
que devuelve un resultado exitoso.
Pero,
df.replace(''-'', None)
que devuelve un resultado siguiente:
0
0 - // this isn''t replaced
1 3
2 2
3 5
4 1
5 -5
6 -1
7 -1 // this is changed to `-1`...
8 9
¿Por qué se devuelve un resultado tan extraño?
Como quiero verter este marco de datos en la base de datos MySQL, no puedo poner valores NaN
en ningún elemento en mi marco de datos y en su lugar quiero poner None
. Seguramente, primero puede cambiar ''-''
a NaN
y luego convertir NaN
a None
, pero quiero saber por qué el dataframe actúa de una manera tan terrible.
Encontré la solución usando
df.replace({''-'': None})
la solución más simple y elegante.
where
es probablemente lo que estás buscando Asi que
data=data.where(data==''-'', None)
De los documentos panda :
where
[devuelve] un objeto de la misma forma que self y cuyas entradas correspondientes son de self donde cond es True y de otro modo son de otro).