Pandas Cómo reemplazar? con NaN – manejo de valores perdidos no estándar

Soy nuevo en pandas, estoy tratando de cargar el csv en Dataframe. Mis datos tienen valores faltantes representados como? , y estoy tratando de reemplazarlo con valores perdidos estándar – NaN

Por favor ayúdame con esto. He intentado leer los documentos de Pandas, pero no puedo seguirlos.

def readData(filename): DataLabels =["age", "workclass", "fnlwgt", "education", "education-num", "marital-status", "occupation", "relationship", "race", "sex", "capital-gain", "capital-loss", "hours-per-week", "native-country", "class"] # ==== trying to replace ? with Nan using na_values rawfile = pd.read_csv(filename, header=None, names=DataLabels, na_values=["?"]) age = rawfile["age"] print age print rawfile[25:40] #========trying to replace ? rawfile.replace("?", "NaN") print rawfile[25:40] 

La instantánea de los datos.

Puede reemplazar esto solo para esa columna usando replace :

 df['workclass'].replace('?', np.NaN) 

o para toda la df:

 df.replace('?', np.NaN) 

ACTUALIZAR

OK, resolví el problema, de manera predeterminada, si no pasa un carácter separador, entonces read_csv usará comas ',' como separador.

Sus datos y en particular un ejemplo donde tiene una línea problemática:

 54, ?, 180211, Some-college, 10, Married-civ-spouse, ?, Husband, Asian-Pac-Islander, Male, 0, 0, 60, South, >50K 

de hecho, tiene una coma y un espacio como separador, de modo que cuando na_value=['?'] el valor de na_value=['?'] esto no coincidió porque todos tus valores tienen un carácter de espacio delante de todos ellos que no puedes observar.

Si cambias tu línea a esto:

 rawfile = pd.read_csv(filename, header=None, names=DataLabels, sep=',\s', na_values=["?"]) 

entonces deberías encontrar que todo funciona:

 27 54 NaN 180211 Some-college 10 

Usar numpy.nan

Numpy – Reemplazar un número con NaN

 import numpy as np df.applymap(lambda x: np.nan if x == '?' else x) 

bien lo tengo por:

  #========trying to replace ? newraw= rawfile.replace('[?]', np.nan, regex=True) print newraw[25:40]