¿Cómo puedo hacer que los encabezados de las columnas del marco de datos de pandas estén en minúsculas?


96

Quiero que todos los encabezados de columna en mi marco de datos de pandas sean minúsculas

Ejemplo

Si tengo:

data =

  country country isocode  year     XRAT          tcgdp
0  Canada             CAN  2001  1.54876   924909.44207
1  Canada             CAN  2002  1.56932   957299.91586
2  Canada             CAN  2003  1.40105  1016902.00180
....

Me gustaría cambiar XRAT a xrat haciendo algo como:

data.headers.lowercase()

Para que consiga:

  country country isocode  year     xrat          tcgdp
0  Canada             CAN  2001  1.54876   924909.44207
1  Canada             CAN  2002  1.56932   957299.91586
2  Canada             CAN  2003  1.40105  1016902.00180
3  Canada             CAN  2004  1.30102  1096000.35500
....

No sabré los nombres de cada encabezado de columna antes de tiempo.


10
Más fácildf.columns = df.columns.str.lower()
Alex Montoya

Respuestas:


175

Puedes hacerlo así:

data.columns = map(str.lower, data.columns)

o

data.columns = [x.lower() for x in data.columns]

ejemplo:

>>> data = pd.DataFrame({'A':range(3), 'B':range(3,0,-1), 'C':list('abc')})
>>> data
   A  B  C
0  0  3  a
1  1  2  b
2  2  1  c
>>> data.columns = map(str.lower, data.columns)
>>> data
   a  b  c
0  0  3  a
1  1  2  b
2  2  1  c

7
Tenga en cuenta que esto puede llevar a nombres de columna duplicados cuando menor (columna1) == menor (columna2) (por ejemplo, 'a' y 'A'). Esto puede tener consecuencias no deseadas al hacer referencia a columnas más adelante. (por ejemplo, los datos ['a'] devolverán un DataFrame, no una Serie, con todas las columnas llamadas 'a'). Vea esta esencia para un ejemplo: gist.github.com/grisaitis/170e82a008480acb4fa3
grisaitis

1
[x.lower() for x in data.columns]es equivalente a:[x.lower() for x in data]
joctee

Mientras lo hace, es bueno usarlo[x.lower().strip() for x in df0]
Pawel Kranzberg

@PawelKranzberg ¿Tiene alguna idea de cómo bajar los nombres de las columnas deMultiIndex
curioso_nustian

1
@curious_nustian - Sí, por ejemplo:df.index.names = [x.lower().strip() for x in df.index.names]
Pawel Kranzberg

99

Usted podría hacerlo fácilmente con str.lowerpor columns:

df.columns = df.columns.str.lower()

Ejemplo:

In [63]: df
Out[63]: 
  country country isocode  year     XRAT         tcgdp
0  Canada             CAN  2001  1.54876  9.249094e+05
1  Canada             CAN  2002  1.56932  9.572999e+05
2  Canada             CAN  2003  1.40105  1.016902e+06

In [64]: df.columns = df.columns.str.lower()

In [65]: df
Out[65]: 
  country country isocode  year     xrat         tcgdp
0  Canada             CAN  2001  1.54876  9.249094e+05
1  Canada             CAN  2002  1.56932  9.572999e+05
2  Canada             CAN  2003  1.40105  1.016902e+06

19

Si desea hacer el cambio de nombre usando una llamada de método encadenado, puede usar

data.rename(
    columns=unicode.lower
)

(Python 2)

o

data.rename(
    columns=str.lower
)

(Python 3)


0

He aquí una forma sencilla: data.columns = data.columns.str.lower()


Esto dará un error si el campo es numérico
Chadee Fouad

0
df.columns = df.columns.str.lower()

es el más fácil, pero dará un error si algunos encabezados son numéricos

si tiene encabezados numéricos, use esto:

df.columns = [str(x).lower() for x in df.columns]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.