Eliminar o reemplazar espacios en los nombres de las columnas

3 minutos de lectura

avatar de usuario
SAM244776

¿Cómo se pueden reemplazar los espacios en los nombres de las columnas del marco de datos con “_”?

['join_date' 'fiscal_quarter' 'fiscal_year' 'primary_channel'
 'secondary_channel' 'customer_count' 'new_members' 'revisit_next_day'
 'revisit_14_day' 'demand_1yr' 'revisit_next_day_rate'
 'revisit_14_day_rate' 'demand_1yr_per_new_member' u'ch_Ad Network'
 u'ch_Affiliate' u'ch_Branded SEM' u'ch_DSP' u'ch_Daily Email'
 u'ch_Daily Messaging' u'ch_Direct' u'ch_Direct Publisher' u'ch_Email'
 u'ch_Feeds' u'ch_Native' u'ch_Non-Branded SEM' u'ch_Organic Search'
 u'ch_Paid Social' u'ch_Site' u'ch_Special Email' u'ch_Television'
 u'ch_Trigger Email' u'ch_UNMAPPED' u'ch_Unpaid Social' u'quarter_Q2'
 u'quarter_Q3' u'quarter_Q4']

avatar de usuario
psidom

  • Para eliminar espacios en blanco:
  1. Para eliminar espacios en blanco En todas partes:
df.columns = df.columns.str.replace(' ', '')
  1. Para eliminar espacios en blanco en el comienzo de la cadena:
df.columns = df.columns.str.lstrip()
  1. Para eliminar espacios en blanco en el final de la cadena:
df.columns = df.columns.str.rstrip()
  1. Para eliminar espacios en blanco en ambos extremos:
df.columns = df.columns.str.strip()
  • Para reemplazar los espacios en blanco con otros caracteres (guión bajo, por ejemplo):
  1. Para reemplazar el espacio en blanco En todas partes
df.columns = df.columns.str.replace(' ', '_')
  1. Para reemplazar el espacio en blanco al principio:
df.columns = df.columns.str.replace('^ +', '_')
  1. Para reemplazar el espacio en blanco al final:
df.columns = df.columns.str.replace(' +$', '_')
  1. Para reemplazar el espacio en blanco en ambos extremos:
df.columns = df.columns.str.replace('^ +| +$', '_')

Todo lo anterior también se aplica a una columna específica, suponga que tiene una columna llamada colentonces solo haz:

df[col] = df[col].str.strip()  # or .replace as above

Los comandos se pueden encadenar

df.columns = df.columns.str.strip().str.replace(' ', '_')

avatar de usuario
no es un robot

Métodos de cadena de Python son extremadamente rápidos y se pueden usar en una lista de comprensión para corregir los nombres de las columnas:

# replace white spaces by underscores
df.columns = [c.replace(' ', '_') for c in df]

# strip leading white spaces
df.columns = [c.lstrip() for c in df]

# strip trailing white spaces
df.columns = [c.rstrip() for c in df]

# replace leading white spaces by underscores
df.columns = ['_' + c.lstrip() for c in df]

o map métodos de tira:

# strip leading white spaces
df.columns = list(map(str.lstrip, df))

Dado que los métodos de cadena vectorizados de pandas (pandas.Index.str y pandas.Series.str) no están optimizados, el uso de métodos de cadena de Python en una comprensión suele ser más rápido, especialmente si necesita encadenarlos.

Por ejemplo, para nombres de columnas de 100k, si necesita encadenar 3 métodos, los métodos de cadenas de Python son de 2 a 5 veces más rápidos que los métodos pandas equivalentes.

n = 100_000
df = pd.DataFrame([range(n)], columns=[f" {i} {j} " for i,j in zip(range(n), range(n, 0, -1))])

%timeit df.set_axis(df.columns.str.replace('^ +', 'S', regex=True).str.replace(' +$', 'E', regex=True).str.replace(' ', '_'), axis=1)
# 331 ms ± 2.21 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit df.set_axis('S' + df.columns.str.strip().str.replace(' ', '_') + 'E', axis=1)
# 118 ms ± 3.66 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit df.set_axis(['S' + c.strip().replace(' ', '_') + 'E' for c in df], axis=1)
# 68 ms ± 5.09 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)

¿Ha sido útil esta solución?