Noms de colonnes vs Noms de séries
Je voudrais expliquer un peu ce qui se passe en coulisses.
Les Dataframes sont un ensemble de séries.
Les séries sont à leur tour une extension d'une numpy.array
.
numpy.array
ont une propriété .name
.
C'est le nom de la série. Il est rare que Pandas respecte cet attribut, mais il traîne par endroits et peut être utilisé pour pirater certains comportements de Pandas.
Nommer la liste des colonnes
Beaucoup de réponses ici parlent de la df.columns
étant un list
alors qu'il s'agit en fait d'un Series
. Cela signifie qu'il a un .name
attribut.
Voici ce qui se passe si vous décidez de remplir le nom des colonnes Series
:
df.columns = ['column_one', 'column_two']
df.columns.names = ['name of the list of columns']
df.index.names = ['name of the index']
name of the list of columns column_one column_two
name of the index
0 4 1
1 5 2
2 6 3
Notez que le nom de l'index vient toujours une colonne plus bas.
Des artefacts qui perdurent
Le site .name
l'attribut s'attarde parfois. Si vous définissez df.columns = ['one', 'two']
alors le df.one.name
sera 'one'
.
Si vous définissez df.one.name = 'three'
puis df.columns
vous donnera toujours ['one', 'two']
et df.one.name
vous donnera 'three'
.
MAIS
pd.DataFrame(df.one)
retournera
three
0 1
1 2
2 3
Parce que Pandas réutilise le .name
de l'élément déjà défini Series
.
Noms de colonnes à plusieurs niveaux
Pandas a des moyens de faire des noms de colonnes à plusieurs niveaux. Il n'y a pas tant de magie que cela, mais je voulais également aborder ce sujet dans ma réponse, car je ne vois personne qui s'y intéresse ici.
|one |
|one |two |
0 | 4 | 1 |
1 | 5 | 2 |
2 | 6 | 3 |
Ceci est facilement réalisable en définissant les colonnes comme des listes, comme ceci :
df.columns = [['one', 'one'], ['one', 'two']]
7 votes
Vous pouvez consulter les documents officiels qui traitent du renommage des étiquettes de colonne : pandas.pydata.org/pandas-docs/stable/guide_utilisateur/text.html