with values exclude check python replace pandas nan nonetype

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).