Reemplace None con NaN en pandas dataframe


99

Tengo mesa x:

        website
0   http://www.google.com/
1   http://www.yahoo.com
2   None

Quiero reemplazar Python None con pandas NaN. Lo intenté:

x.replace(to_replace=None, value=np.nan)

Pero tengo:

TypeError: 'regex' must be a string or a compiled regular expression or a list or dict of strings or regular expressions, you passed a 'bool'

¿Cómo debo hacerlo?

Respuestas:


145

Puede usar DataFrame.fillnao Series.fillnaque reemplazará el objeto Python None, no la cadena 'None'.

import pandas as pd
import numpy as np

Para el marco de datos:

df = df.fillna(value=np.nan)

Para columna o serie:

df.mycol.fillna(value=np.nan, inplace=True)

3
Si importó datos de una base de datos SQL, puede combinarlos con la respuesta a continuación. Esto convierte None (que no es una cadena) en NaN. Entonces puede df['column'].replace(nan, "", inplace=True)si dice que desea que None sea una cadena vacía.
VISQL

1
Esta respuesta no funciona para mí; no reemplaza None. La respuesta de Max funciona.
Daniel

He encontrado esta solución columna específica para ser el más eficaz: df['website'].replace(pd.np.nan, 0, inplace=True). Tampoco requiere que se incluya Numpy, confiando en la referencia incorporada de Pandas.
CodeMantle

2
pd.np.nanahora da FutureWarning: The pandas.np module is deprecated and will be removed from pandas in a future version. Import numpy directly instead.
Alex Povel

16

Aquí tienes otra opción:

df.replace(to_replace=[None], value=np.nan, inplace=True)

3
Tenga cuidado cuando ejecute df.replace ([None], np.nan, inplace = True), esto cambió todos los objetos de fecha y hora con datos faltantes a tipos de objetos. Por lo tanto, es posible que tenga consultas interrumpidas a menos que las cambie a la fecha y hora, lo que puede ser agotador según el tamaño de sus datos.
Doubledown

15

La siguiente línea se reemplaza Nonepor NaN:

df['column'].replace('None', np.nan, inplace=True)

Solo lo verifiqué dos veces, funciona para mí. ¿Obtiene algún error o los valores 'Ninguno' no se reemplazan?
Max Izadi

NB: este método utiliza np.nan, que tiene un dtype flotante (por ejemplo:) float64, a diferencia del dtype predeterminado de pandas objectpara una columna nan.
tehfink

6
Tenga en cuenta: esto reemplaza las cadenas con el texto "Ninguno", pero no los valores explícitos Ninguno ( Ninguno como en la constante ).
Gregor Müllegger

4

Si usa df.replace ([None], np.nan, inplace = True), esto cambió todos los objetos de fecha y hora con datos faltantes a tipos de objetos. Por lo tanto, es posible que tenga consultas interrumpidas a menos que las cambie a la fecha y hora, lo que puede ser agotador según el tamaño de sus datos.

Si desea utilizar este método, primero puede identificar los campos de tipo d del objeto en su df y luego reemplazar Ninguno:

obj_columns = list(df.select_dtypes(include=['object']).columns.values)
df[obj_columns] = df[obj_columns].replace([None], np.nan)

0
DataFrame['Col_name'].replace("None", np.nan, inplace=True)

1
Hola, bienvenido a stackoverflow y gracias por responder. Si bien este código podría responder la pregunta, ¿puede considerar agregar alguna explicación sobre cuál fue el problema que resolvió y cómo lo resolvió? Esto ayudará a los futuros lectores a comprender mejor su respuesta y aprender de ella.
Plutian
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.