Elimine caracteres no ASCII de las columnas de cadena en pandas

Tengo un dataframe de panda con varias columnas que se mezclan con valores y caracteres no deseados.

columnA columnB columnC ColumnD \x00A\X00B NULL \x00C\x00D 123 \x00E\X00F NULL NULL 456 

Lo que me gustaría hacer es hacer este dataframe como se muestra a continuación.

 columnA columnB columnC ColumnD AB NULL CD 123 EF NULL NULL 456 

Con mis códigos a continuación, puedo eliminar ‘\ x00’ de la columna A, pero la columna C es difícil, ya que se mezcla con NULL en cierta fila.

 col_names = cols_to_clean fixer = dict.fromkeys([0x00], u'') for i in col_names: if df[i].isnull().any() == False: if df[i].dtype != np.int64: df[i] = df[i].map(lambda x: x.translate(fixer)) 

¿Hay alguna forma eficiente de eliminar los caracteres no deseados de la columna C?

Preparar

 df = pd.DataFrame({ 'columnA' : ['\x00A\x00B', '\x00E\x00F'], 'columnB' : ['NULL', 'NULL'], 'columnC' : ['\x00C\x00D', 'NULL'], 'columnD' : [123, 456] }) df columnA columnB columnC columnD 0 AB NULL CD 123 1 EF NULL NULL 456 

Use apply + str.replace en las columnas de cadena:

 c = df.columns[df.dtypes == object] df[c] = df[c].apply(lambda x: x.str.replace('\W+', '')) 

 df columnA columnB columnC columnD 0 AB NULL CD 123 1 EF NULL NULL 456 

Si necesita una expresión regular más completa para retener solo caracteres ASCII (no solo letras o dígitos), puede adaptar la expresión regular en esta respuesta .

¿Cuál es el truco con NULL ?
Si desea reemplazar la cadena 'NULL' con un uso real de NaN replace :

 df.replace('NULL',np.NaN, inplace=True) print(df.isnull()) 

Afuera:

    columnaA columnaB columnaC columnaD
 0 Falso Verdad Falso Falso
 1 Falso Verdadero Verdadero Falso

O necesita reemplazar 'NULL' con una cadena vacía, use RegEx en str.replace

 df = df.apply(lambda col: col.str.replace( r"[\x00|NULL]", "") if col.dtype == object else col) print (df.isnull()) print (df.values) 

Afuera:


    columnaA columnaB columnaC columnaD
 0 Falso Falso Falso Falso
 1 Falso Falso Falso Falso

 [['AB' '' 'CD' 123]
  ['EF' '' '' '456]]