Marco de datos de Pandas – Reemplace la cadena NULL por un espacio en blanco y NULL numérico por 0

Estoy trabajando en un gran conjunto de datos con muchas columnas de diferentes tipos. Hay una mezcla de valores numéricos y cadenas con algunos valores NULL. Necesito cambiar el valor NULL a en blanco o 0 según el tipo.

1 John 2 Doe 3 Mike 4 Orange 5 Stuff 9 NULL NULL NULL 8 NULL NULL Lemon 12 NULL 

Quiero que se vea así

 1 John 2 Doe 3 Mike 4 Orange 5 Stuff 9 0 8 0 Lemon 12 

Puedo hacer esto para cada individuo, pero como voy a extraer varios conjuntos de datos extremadamente grandes con cientos de columnas, me gustaría hacerlo de otra manera.

Edición: tipos de dataset más pequeño,

 Field1 object Field2 object Field3 object Field4 object Field5 object Field6 object Field7 object Field8 object Field9 object Field10 float64 Field11 float64 Field12 float64 Field13 float64 Field14 float64 Field15 object Field16 float64 Field17 object Field18 object Field19 float64 Field20 float64 Field21 int64 

Use DataFrame.select_dtypes para columnas numéricas, filtre por subconjunto y reemplace los valores a 0 , luego vuelva a comstackr todas las otras columnas para vaciar la cadena:

 print (df) 0 1 2 3 4 5 6 7 8 9 0 1 John 2.0 Doe 3 Mike 4.0 Orange 5 Stuff 1 9 NaN NaN NaN 8 NaN NaN Lemon 12 NaN print (df.dtypes) 0 int64 1 object 2 float64 3 object 4 int64 5 object 6 float64 7 object 8 int64 9 object dtype: object c = df.select_dtypes(np.number).columns df[c] = df[c].fillna(0) df = df.fillna("") print (df) 0 1 2 3 4 5 6 7 8 9 0 1 John 2.0 Doe 3 Mike 4.0 Orange 5 Stuff 1 9 0.0 8 0.0 Lemon 12 

Otra solución es crear un diccionario para reemplazar:

 num_cols = df.select_dtypes(np.number).columns d1 = dict.fromkeys(num_cols, 0) d2 = dict.fromkeys(df.columns.difference(num_cols), "") d = {**d1, **d2} print (d) {0: 0, 2: 0, 4: 0, 6: 0, 8: 0, 1: '', 3: '', 5: '', 7: '', 9: ''} df = df.fillna(d) print (df) 0 1 2 3 4 5 6 7 8 9 0 1 John 2.0 Doe 3 Mike 4.0 Orange 5 Stuff 1 9 0.0 8 0.0 Lemon 12 

Puede intentar esto para sustituir un valor diferente para cada columna diferente (de A a C son numéricas, mientras que D es una cadena):

 import pandas as pd import numpy as np df_pd = pd.DataFrame([[np.nan, 2, np.nan, '0'], [3, 4, np.nan, '1'], [np.nan, np.nan, np.nan, '5'], [np.nan, 3, np.nan, np.nan]], columns=list('ABCD')) df_pd.fillna(value={'A':0.0,'B':0.0,'C':0.0,'D':''}) 

Para las columnas numéricas en df, haga esto:

 import numpy as np df[numeric_cols_list] = df[numeric_cols_list].replace(np.nan, 0) 

Si es una cadena NULA, haz esto:

 df[string_cols] = df[string_cols].replace('NULL', 0) 

No estoy escribiendo el numeric_cols_list completo y string_list con nombres reales.