J'ai un DataFrame utilisant pandas et des étiquettes de colonne que je dois modifier pour remplacer les étiquettes de colonne d'origine.
J’aimerais modifier les noms des colonnes dans un DataFrame A
où se trouvent les noms des colonnes originales :
['$a', '$b', '$c', '$d', '$e']
en
['a', 'b', 'c', 'd', 'e'].
J'ai stocké les noms des colonnes modifiées dans une liste, mais je ne sais pas comment remplacer les noms des colonnes.
Utilisez la fonction [df.rename()
][1] et indiquez les colonnes à renommer. Il n'est pas nécessaire de renommer toutes les colonnes :
df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})
# Or rename the existing DataFrame (rather than creating a copy)
df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'}, inplace=True)
Exemple de code minimal
df = pd.DataFrame('x', index=range(3), columns=list('abcde'))
df
a b c d e
0 x x x x x
1 x x x x x
2 x x x x x
Les méthodes suivantes fonctionnent toutes et produisent le même résultat :
df2 = df.rename({'a': 'X', 'b': 'Y'}, axis=1) # new method
df2 = df.rename({'a': 'X', 'b': 'Y'}, axis='columns')
df2 = df.rename(columns={'a': 'X', 'b': 'Y'}) # old method
df2
X Y c d e
0 x x x x x
1 x x x x x
2 x x x x x
N'oubliez pas de réassigner le résultat, car la modification n'est pas en place. Alternativement, spécifiez inplace=True
:
df.rename({'a': 'X', 'b': 'Y'}, axis=1, inplace=True)
df
X Y c d e
0 x x x x x
1 x x x x x
2 x x x x x
A partir de la v0.25, vous pouvez également spécifier errors='raise'
pour générer des erreurs si une colonne à renommer invalide est spécifiée. Voir v0.25 rename()
docs.
Utilisez df.set_axis()
avec axis=1
et inplace=False
(pour retourner une copie).
df2 = df.set_axis(['V', 'W', 'X', 'Y', 'Z'], axis=1, inplace=False)
df2
V W X Y Z
0 x x x x x
1 x x x x x
2 x x x x x
Cela renvoie une copie, mais vous pouvez modifier le DataFrame en place en définissant inplace=True
(c'est le comportement par défaut pour les versions <=0.24 mais il est probable que cela change dans le futur).
Vous pouvez également assigner des en-têtes directement :
df.columns = ['V', 'W', 'X', 'Y', 'Z']
df
V W X Y Z
0 x x x x x
1 x x x x x
2 x x x x x
[1] : http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.rename.html
La méthode rename
peut prendre une fonction, par exemple :
In [11]: df.columns
Out[11]: Index([u'$a', u'$b', u'$c', u'$d', u'$e'], dtype=object)
In [12]: df.rename(columns=lambda x: x[1:], inplace=True)
In [13]: df.columns
Out[13]: Index([u'a', u'b', u'c', u'd', u'e'], dtype=object)