Como posso deixar os cabeçalhos das colunas do dataframe do pandas em letras minúsculas?

96

Eu quero deixar todos os cabeçalhos de coluna no meu quadro de dados do pandas em letras minúsculas

Exemplo

Se eu tiver:

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

Eu gostaria de mudar XRAT para xrat fazendo algo como:

data.headers.lowercase()

Para que eu receba:

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

Não saberei os nomes de cada cabeçalho de coluna com antecedência.

natsuki_2002
fonte
10
Mais fácildf.columns = df.columns.str.lower()
Alex Montoya

Respostas:

175

Você pode fazer assim:

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

ou

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

exemplo:

>>> 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
fonte
7
Observe que isso pode levar a nomes de coluna duplicados quando inferior (coluna1) == inferior (coluna2) (por exemplo, 'a' e 'A'). Isso pode ter consequências indesejadas ao fazer referência a colunas posteriormente. (por exemplo, data ['a'] retornará um DataFrame, não uma série, com todas as colunas nomeadas 'a'). Veja esta essência para um exemplo: gist.github.com/grisaitis/170e82a008480acb4fa3
grisaitis
1
[x.lower() for x in data.columns]é equivalente a:[x.lower() for x in data]
joctee
Já que você está nisso, é bom usar[x.lower().strip() for x in df0]
Pawel Kranzberg
@PawelKranzberg Você tem alguma ideia de como diminuir os nomes das colunas deMultiIndex
curious_nustian
1
@curious_nustian - Sim, por exemplo:df.index.names = [x.lower().strip() for x in df.index.names]
Pawel Kranzberg
99

Você poderia fazê-lo facilmente com str.lowerpara columns:

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

Exemplo:

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
fonte
19

Se você quiser fazer a renomeação usando uma chamada de método em cadeia, você pode usar

data.rename(
    columns=unicode.lower
)

(Python 2)

ou

data.rename(
    columns=str.lower
)

(Python 3)

teísta
fonte
0

Aqui está uma maneira simples: data.columns = data.columns.str.lower()

AnksG
fonte
Isso gerará um erro se o campo for numérico
Chadee Fouad
0
df.columns = df.columns.str.lower()

é o mais fácil mas apresentará um erro se alguns cabeçalhos forem numéricos

se você tiver cabeçalhos numéricos, use isto:

df.columns = [str(x).lower() for x in df.columns]
Chadee Fouad
fonte