web-dev-qa-db-fra.com

Changer un nom de colonne spécifique dans pandas DataFrame

Je recherchais un moyen élégant de modifier un nom de colonne spécifié dans un DataFrame.

jouer des données ...

import pandas as pd
d = {
         'one': [1, 2, 3, 4, 5],
         'two': [9, 8, 7, 6, 5],
         'three': ['a', 'b', 'c', 'd', 'e']
    }
df = pd.DataFrame(d)

La solution la plus élégante que j'ai trouvée jusqu'à présent ...

names = df.columns.tolist()
names[names.index('two')] = 'new_name'
df.columns = names

J'espérais un simple one-liner ... cette tentative a échoué ...

df.columns[df.columns.tolist().index('one')] = 'another_name'

Toutes les allusions reçues avec reconnaissance.

172
Mark Graph

Un one-liner existe:

In [27]: df=df.rename(columns = {'two':'new_name'})

In [28]: df
Out[28]: 
  one three  new_name
0    1     a         9
1    2     b         8
2    3     c         7
3    4     d         6
4    5     e         5

Voici la docstring pour la méthode rename.

 Définition: df.rename (self, index = None, colonnes = None, copie = True, inplace = False) 
 Chaîne de documents: 
 Modifier l'index et/ou les colonnes à l'aide de la fonction d'entrée ou 
 fonctions. Les valeurs de fonction/dict doivent être uniques (1 à 1). Les étiquettes non 
 Contenues dans un dict/une série seront laissées telles quelles. 
 
 Paramètres 
 ---------- 
 index: dict-like ou fonction, optionnel 
 Transformation à appliquer aux valeurs d'index 
 colonnes: dict-like ou fonction, optionnel 
 Transformation à appliquer aux valeurs de colonnes 
 copy: boolean, valeur par défaut True 
 Copie également les données sous-jacentes 
 inplace: boolean, valeur par défaut False 
 Indique s'il faut renvoyer un nouveau DataFrame. Si True, la valeur de la copie est 
 Ignorée. 
 
 Voir aussi 
 -------- 
 Series.rename 
 
 Retourne 
 ------- 
 Renommé: DataFrame (nouvel objet) 
316
Nipun Batra

Étant donné que l'argument inplace est disponible, vous n'avez pas besoin de copier et d'assigner le cadre de données d'origine à lui-même, mais procédez comme suit:

df.rename(columns={'two':'new_name'}, inplace=True)
102
Jeong-Yoon Lee

Qu'en est-il de?

df.columns.values[2] = "new_name"
31
Jacob H

Pandas 0.21 a maintenant un paramètre d'axe

La méthode de changement de nom a généré un paramètre d’axe correspondant à la plupart des autres API pandas.

Donc, en plus de cela:

df.rename(columns = {'two':'new_name'})

Tu peux faire:

df.rename({'two':'new_name'}, axis=1)

ou

df.rename({'two':'new_name'}, axis='columns')
6
Ted Petrou

Si vous savez de quel numéro de colonne il s'agit (premier/deuxième/nième), cette solution publiée sur une question similaire fonctionne, qu'elle soit nommée ou non, et sur une ligne: https://stackoverflow.com/ a/26336314/4355695

df.rename(columns = {list(df)[1]:'new_name'}, inplace=True)
# 1 is for second column (0,1,2..)
4
Nikhil VJ

Pour renommer les colonnes, voici un exemple simple qui fonctionnera à la fois pour Default(0,1,2,etc;) et pour les colonnes existantes, mais pas très utile pour des ensembles de données plus volumineux (comportant de nombreuses colonnes).

Pour un plus grand ensemble de données, nous pouvons découper les colonnes dont nous avons besoin et appliquer le code ci-dessous:

df.columns = ['new_name','new_name1','old_name']
3
Naveen Reddy

pandas version 0.23.4

df.rename(index=str,columns={'old_name':'new_name'},inplace=True)

Pour mémoire:

omettre index = str donnera une erreur, remplace a un argument inattendu 'colonnes'

2
Kallol Medhi

Le code court suivant peut aider:

df3 = df3.rename(columns={c: c.replace(' ', '') for c in df3.columns})

Supprimer les espaces des colonnes.

2
Emmanuel Masabo

Une autre option serait de simplement copier-déposer la colonne:

df = pd.DataFrame(d)
df['new_name'] = df['two']
df = df.drop('two', axis=1)
df.head()

Après cela, vous obtenez le résultat:

    one three   new_name
0   1   a       9
1   2   b       8
2   3   c       7
3   4   d       6
4   5   e       5
0
anka