¿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.

natsuki_2002
fuente
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
Roman Pekar
fuente
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
Anton Protopopov
fuente
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)

theister
fuente
0

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

AnksG
fuente
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]
Chadee Fouad
fuente