Come posso rendere tutte minuscole le intestazioni delle colonne del dataframe dei panda?


96

Voglio rendere tutte le intestazioni di colonna nel mio frame di dati Panda in minuscolo

Esempio

Se ho:

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

Vorrei cambiare XRAT in xrat facendo qualcosa come:

data.headers.lowercase()

Quindi ottengo:

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

Non conoscerò in anticipo i nomi di ciascuna intestazione di colonna.


10
Più semplicedf.columns = df.columns.str.lower()
Alex Montoya

Risposte:


175

Puoi farlo in questo modo:

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

o

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

esempio:

>>> 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
Nota che questo può portare a duplicare i nomi delle colonne quando inferiore (colonna1) == inferiore (colonna2) (ad esempio, "a" e "A"). Ciò può avere conseguenze impreviste quando si fa riferimento alle colonne in un secondo momento. (ad es. data ['a'] restituirà un DataFrame, non una serie, con tutte le colonne denominate "a"). Vedi questa sintesi per un esempio: gist.github.com/grisaitis/170e82a008480acb4fa3
grisaitis

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

Già che ci sei, è bene usare[x.lower().strip() for x in df0]
Pawel Kranzberg

@PawelKranzberg Hai idea di come abbassare i nomi delle colonne diMultiIndex
Curious_nustian

1
@curious_nustian - Sì, ad esempio:df.index.names = [x.lower().strip() for x in df.index.names]
Pawel Kranzberg

99

Potresti farlo facilmente con str.lowerper columns:

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

Esempio:

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

Se vuoi fare la ridenominazione usando una chiamata al metodo concatenato, puoi usare

data.rename(
    columns=unicode.lower
)

(Python 2)

o

data.rename(
    columns=str.lower
)

(Python 3)


0

Ecco un modo semplice: data.columns = data.columns.str.lower()


Questo darà un errore se il campo è numerico
Chadee Fouad

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

è il più semplice ma darà un errore se alcune intestazioni sono numeriche

se hai intestazioni numeriche, usa questo:

df.columns = [str(x).lower() for x in df.columns]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.