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 axisparamè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 renamen'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 axisargument est analogue au columnsparamè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 replaceméthode des chaînes en python, les pandas Index et Series (object dtype uniquement) définissent une str.replacemé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.replaceprend en charge les expressions régulières (activé par défaut). Consultez la documentation pour plus d'informations.
Passer une liste à set_axisavecaxis=1
Appel set_axisavec une liste d'en-tête (s). La liste doit être égale en longueur à la taille des colonnes / index. set_axismute le DataFrame d'origine par défaut, mais vous pouvez spécifier inplace=Falsede 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, inplacesera par défaut True.
Chaînage de méthodes
Pourquoi choisir set_axisquand 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_axisest 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.