Tira / recorta todas las cadenas de un dataframe

Limpiando los valores de un marco de datos multitipo en python/pandas, quiero recortar las cadenas. Actualmente lo estoy haciendo en dos instrucciones:

import pandas as pd

df = pd.DataFrame([['  a  ', 10], ['  c  ', 5]])

df.replace('^s+', '', regex=True, inplace=True) #front
df.replace('s+$', '', regex=True, inplace=True) #end

df.values

Esto es bastante lento, ¿qué podría mejorar?

Respuestas:11 Respuestas 11
Tiempo:hace 5 años, 9 meses
Última modificación:hace 2 meses

Solución

Puede utilizar DataFrame.select_dtypes para seleccionar columnas y, a continuación, la función str.strip.stringapply

Aviso: Los valores no pueden ser tipos como dictados o listas, porque sus dtypes son objeto.

df_obj = df.select_dtypes(['object'])
print (df_obj)
0    a  
1    c  

df[df_obj.columns] = df_obj.apply(lambda x: x.str.strip())
print (df)

   0   1
0  a  10
1  c   5

Pero si solo hay unas pocas columnas, use str.strip:

df[0] = df[0].str.strip()

Otras respuestas

Puedes probar:

df[0] = df[0].str.strip()

o más específicamente para todas las columnas de cadena

non_numeric_columns = list(set(df.columns)-set(df._get_numeric_data().columns))
df[non_numeric_columns] = df[non_numeric_columns].apply(lambda x : str(x).strip())

Deja un comentario