Quero adicionar _x
sufixo a cada nome de coluna assim:
featuresA = myPandasDataFrame.columns.values + '_x'
Como eu faço isso? Além disso, se eu quisesse adicionar x_
como sufixo, como a solução mudaria?
Quero adicionar _x
sufixo a cada nome de coluna assim:
featuresA = myPandasDataFrame.columns.values + '_x'
Como eu faço isso? Além disso, se eu quisesse adicionar x_
como sufixo, como a solução mudaria?
Respostas:
Você pode usar uma list
compreensão:
df.columns = [str(col) + '_x' for col in df.columns]
Existem também métodos integrados como .add_suffix()
e .add_prefix()
conforme mencionado em outra resposta.
A seguir está a melhor maneira de adicionar sufixo na minha opinião.
df = df.add_suffix('_some_suffix')
Por ser uma função que é chamada no DataFrame e retorna o DataFrame - você pode usá-la na cadeia das chamadas.
inplace=True
opção de parâmetro). Caso contrário, perfeito.
Se você está tentando modificar df
no local, a opção mais barata (e mais simples) é a adição no local diretamente no df.columns
(ou seja, usando Index.__iadd__
).
df = pd.DataFrame({"A": [9, 4, 2, 1], "B": [12, 7, 5, 4]})
df
A B
0 9 12
1 4 7
2 2 5
3 1 4
df.columns += '_some_suffix'
df
A_some_suffix B_some_suffix
0 9 12
1 4 7
2 2 5
3 1 4
Para adicionar um prefixo, você usaria da mesma forma
df.columns = 'some_prefix_' + df.columns
df
some_prefix_A some_prefix_B
0 9 12
1 4 7
2 2 5
3 1 4
Outra opção barata é usar uma compreensão de lista com f-string
formatação (disponível em python3.6 +).
df.columns = [f'{c}_some_suffix' for c in df]
df
A_some_suffix B_some_suffix
0 9 12
1 4 7
2 2 5
3 1 4
E para prefixo, da mesma forma,
df.columns = [f'some_prefix{c}' for c in df]
Também é possível adicionar * correções durante o encadeamento de métodos. Para adicionar um sufixo, useDataFrame.add_suffix
df.add_suffix('_some_suffix')
A_some_suffix B_some_suffix
0 9 12
1 4 7
2 2 5
3 1 4
Isso retorna uma cópia dos dados. IOW, df
não é modificado.
Adicionar prefixos também é feito com DataFrame.add_prefix
.
df.add_prefix('some_prefix_')
some_prefix_A some_prefix_B
0 9 12
1 4 7
2 2 5
3 1 4
Que também não se modifica df
.
add_*fix
Estes são bons métodos se você estiver tentando executar o encadeamento de métodos:
df.some_method1().some_method2().add_*fix(...)
No entanto, add_prefix
(e add_suffix
) cria uma cópia de todo o dataframe, apenas para modificar os cabeçalhos. Se você acredita que isso é um desperdício, mas ainda quer fazer uma corrente, você pode ligar para pipe
:
def add_suffix(df):
df.columns += '_some_suffix'
return df
df.some_method1().some_method2().pipe(add_suffix)
new
ou old
) em vez de todas as colunas? Obrigado.
df = pd.DataFrame([[1,2,3]]*10)
-> df.columns
, então você usariadf.add_suffix('_x')
df.columns = df.columns.astype(str) + '_x'
como meu primeiro método mostra.
Eu não vi essa solução proposta acima, então adicionei isso à lista:
df.columns += '_x'
E você pode se adaptar facilmente ao cenário de prefixo.
df = pd.DataFrame([[1,2,3]]*10)
-> df.columns
, então você usariadf.add_suffix('_x')
Eu conheço 4 maneiras de adicionar um sufixo (ou prefixo) aos nomes de suas colunas:
1- df.columns = [str(col) + '_some_suffix' for col in df.columns]
ou
2- df.rename(columns= lambda col: col+'_some_suffix')
ou
3- df.columns += '_some_suffix'
muito mais fácil.
ou, o mais legal:
3- df.add_suffix('_some_suffix')
DataFrame.rename
.Suspensão de uso add_prefix
eadd_suffix
Em versões futuras do pandas add_prefix
e add_suffix
será preterido . O novo método recomendado é usar DataFrame.rename
:
df = pd.DataFrame({'A': range(3), 'B': range(4, 7)})
print(df)
A B
0 0 4
1 1 5
2 2 6
Usando rename
com axis=1
e formatação de string:
df.rename('col_{}'.format, axis=1)
# or df.rename(columns='col_{}'.format)
col_A col_B
0 0 4
1 1 5
2 2 6
Para realmente sobrescrever os nomes das colunas, podemos atribuir os valores retornados ao nosso df
:
df = df.rename('col_{}'.format, axis=1)
ou use inplace=True
:
df.rename('col_{}'.format, axis=1, inplace=True)