Comment renommer une colonne spécifique dans pandas?
À partir de la v0.24 +, pour renommer une (ou plusieurs) colonnes à la fois,
Si vous devez renommer TOUTES les colonnes à la fois,
DataFrame.set_axis()
méthode avec axis=1
. Passez une séquence de type liste. Des options sont également disponibles pour la modification sur place.
rename
avec axis=1
df = pd.DataFrame('x', columns=['y', 'gdp', 'cap'], index=range(5))
df
y gdp cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Avec 0.21+, vous pouvez maintenant spécifier un axis
paramètre avec rename
:
df.rename({'gdp':'log(gdp)'}, axis=1)
# df.rename({'gdp':'log(gdp)'}, axis='columns')
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
(Notez que ce rename
n'est pas en place par défaut, vous devrez donc réattribuer le résultat .)
Cet ajout a été fait pour améliorer la cohérence avec le reste de l'API. Le nouvel axis
argument est analogue au columns
paramètre - ils font la même chose.
df.rename(columns={'gdp': 'log(gdp)'})
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
rename
accepte également un rappel qui est appelé une fois pour chaque colonne.
df.rename(lambda x: x[0], axis=1)
# df.rename(lambda x: x[0], axis='columns')
y g c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Pour ce scénario spécifique, vous voudriez utiliser
df.rename(lambda x: 'log(gdp)' if x == 'gdp' else x, axis=1)
Semblable à la replace
méthode des chaînes en python, les pandas Index et Series (object dtype uniquement) définissent une str.replace
méthode ("vectorisée") pour le remplacement basé sur les chaînes et les expressions régulières.
df.columns = df.columns.str.replace('gdp', 'log(gdp)')
df
y log(gdp) cap
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
L'avantage de cela par rapport aux autres méthodes est qu'il str.replace
prend en charge les expressions régulières (activé par défaut). Consultez la documentation pour plus d'informations.
Passer une liste à set_axis
avecaxis=1
Appel set_axis
avec une liste d'en-tête (s). La liste doit être égale en longueur à la taille des colonnes / index. set_axis
mute le DataFrame d'origine par défaut, mais vous pouvez spécifier inplace=False
de renvoyer une copie modifiée.
df.set_axis(['cap', 'log(gdp)', 'y'], axis=1, inplace=False)
# df.set_axis(['cap', 'log(gdp)', 'y'], axis='columns', inplace=False)
cap log(gdp) y
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
Remarque: dans les versions futures, inplace
sera par défaut True
.
Chaînage de méthodes
Pourquoi choisir set_axis
quand nous avons déjà une manière efficace d'attribuer des colonnes avec df.columns = ...
? Comme l'a montré Ted Petrou dans [cette réponse], ( https://stackoverflow.com/a/46912050/4909087 ) set_axis
est utile lorsque vous essayez d'enchaîner des méthodes.
Comparer
# new for pandas 0.21+
df.some_method1()
.some_method2()
.set_axis()
.some_method3()
Contre
# old way
df1 = df.some_method1()
.some_method2()
df1.columns = columns
df1.some_method3()
Le premier est une syntaxe plus naturelle et fluide.