Eu tenho um quadro de dados chamado data
. Como renomearia o único cabeçalho de coluna? Por exemplo gdp
para log(gdp)
?
data =
y gdp cap
0 1 2 5
1 2 3 9
2 8 7 2
3 3 4 7
4 6 7 7
5 4 8 3
6 8 2 8
7 9 9 10
8 6 6 4
9 10 10 7
Respostas:
O
rename
programa que aceita um ditado como um parâmetro paracolumns
você passar um ditado com uma única entrada.Veja também relacionados
fonte
inplace
parâmetro, se é ignorar este param então este é um bug, você pode fazer horários com e sem o param, também tentar algo parecidonew_df = df.rename(columns={'new_name':'old_name'})
e ver se isso é mais rápido ou nãoinplace
parâmetro quase dobrou o tempo de 14 segundos para 26 segundos. Mas 14 segundos aindaUma implementação muito mais rápida seria usar
list-comprehension
se você precisar renomear uma única coluna.Se surgir a necessidade de renomear várias colunas, use expressões condicionais como:
Ou, construa um mapeamento usando ae
dictionary
execute a operaçãolist-comprehension
itget
its definindo o valor padrão como o nome antigo:Horários:
fonte
pd.merge_asof()
porque é uma expressão :(.Da v0.24 +, para renomear uma (ou mais) colunas por vez,
DataFrame.rename()
comaxis=1
ouaxis='columns'
(oaxis
argumento foi introduzido emv0.21
.Index.str.replace()
para substituição baseada em string / regex.Se você precisar renomear TODAS as colunas de uma só vez,
DataFrame.set_axis()
método comaxis=1
. Passe uma sequência tipo lista. As opções também estão disponíveis para modificação no local.rename
comaxis=1
Com 0,21+, agora você pode especificar um
axis
parâmetro comrename
:(Observe que
rename
não está no local por padrão, você precisará atribuir o resultado novamente .)Essa adição foi feita para melhorar a consistência com o restante da API. O novo
axis
argumento é análogo aocolumns
parâmetro - eles fazem a mesma coisa.rename
também aceita um retorno de chamada chamado uma vez para cada coluna.Para esse cenário específico, você deseja usar
Index.str.replace
Semelhante ao
replace
método de seqüências de caracteres em python, o pandas Index and Series (apenas no tipo de objeto) define umstr.replace
método ("vetorizado") para a substituição baseada em expressões e regex.A vantagem disso sobre os outros métodos é que
str.replace
suporta regex (ativado por padrão). Veja os documentos para mais informações.Passando uma lista para
set_axis
comaxis=1
Ligue
set_axis
com uma lista de cabeçalho (s). A lista deve ter comprimento igual ao tamanho das colunas / índice.set_axis
modifica o DataFrame original por padrão, mas você pode especificarinplace=False
para retornar uma cópia modificada.Nota: Em versões futuras,
inplace
o padrão seráTrue
.Encadeamento de métodos
Por que escolher
set_axis
quando já temos uma maneira eficiente de atribuir colunasdf.columns = ...
? Conforme mostrado por Ted Petrou em [esta resposta], ( https://stackoverflow.com/a/46912050/4909087 )set_axis
é útil ao tentar encadear métodos.Comparar
Versus
O primeiro é uma sintaxe mais natural e de fluxo livre.
fonte
Existem pelo menos cinco maneiras diferentes de renomear colunas específicas nos pandas, e eu as listei abaixo, juntamente com links para as respostas originais. Também cronometrei esses métodos e achei que eles tinham o mesmo desempenho (apesar do YMMV, dependendo do seu conjunto de dados e cenário). O caso de teste abaixo é renomear colunas
A
M
N
Z
paraA2
M2
N2
Z2
em um dataframe com colunasA
paraZ
conter um milhão de linhas.Resultado:
Use o método mais intuitivo para você e mais fácil de implementar em seu aplicativo.
fonte