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
.string
apply
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())