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.
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)
É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)
Qu'en est-il de?
df.columns.values[2] = "new_name"
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')
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..)
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']
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'
Le code court suivant peut aider:
df3 = df3.rename(columns={c: c.replace(' ', '') for c in df3.columns})
Supprimer les espaces des colonnes.
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