Renommer la colonne spécifique(s) dans les pandas
J'ai un dataframe appelé data
. Comment puis-je renommer le seul à en-tête de colonne? Par exemple gdp
à log(gdp)
?
data =
y gdp cap
0 1 2 5
1 2 3 9
2 8 7 2
3 3 4 7
4 6 7 7
5 4 8 3
6 8 2 8
7 9 9 10
8 6 6 4
9 10 10 7
- Il y a certainement des chevauchements, mais il n'était pas immédiatement clair pour moi de "Renommer des colonnes dans les pandas" que vous pourriez un seul solitaire élément de colonne pour le renommage. Bien sûr, avec le recul, il est évident, et si j'avais creusé plus profond, j'aurais sans doute compris, mais je pense que cette question / réponse est mieux souligné.
Vous devez vous connecter pour publier un commentaire.
La
renommer
montrer qu'il accepte une dict comme un param pourcolumns
si vous venez de passer un dict avec une seule entrée.Voir aussi liées
inplace
param, si c'est le fait d'ignorer ce param alors c'est un bug, pouvez-vous faire timings avec et sans le param également essayer quelque chose commenew_df = df.rename(columns={'new_name':'old_name'})
et voir si c'est plus rapide ou pasinplace
param presque doublé le temps à partir de 14 secondes à 26 secondes. Mais 14 secondes encore un temps assez long, pour changer l'en-tête..github
à ce sujet, veuillez inclure votre système d'exploitation, version de python, numpy et les pandas version, en plus de la sortie dedf.info
et l'un des devs vont regarder ça de près, merciBeaucoup plus rapide pour la mise en œuvre serait d'utiliser
list-comprehension
si vous avez besoin de renommer une colonne unique.Si le besoin s'en fait sentir pour renommer plusieurs colonnes, soit utiliser les expressions conditionnelles comme:
Ou, de construire une cartographie à l'aide d'un
dictionary
et effectuer lalist-comprehension
avecget
opération par la mise en valeur par défaut que l'ancien nom:Horaires:
De v0.24+, pour renommer une ou plusieurs colonnes à la fois,
DataFrame.rename()
avecaxis=1
ouaxis='columns'
(leaxis
argument a été introduit dansv0.21
.Index.str.replace()
pour chaîne/regex en fonction de remplacement.Si vous avez besoin de renommer TOUTES les colonnes à la fois,
DataFrame.set_axis()
méthode avecaxis=1
. Passer d'une liste comme la séquence. Des Options sont disponibles pour la modification ainsi.rename
avecaxis=1
À 0,21+, vous pouvez maintenant spécifier un
axis
paramètre avecrename
:(Notez que
rename
n'est pas en place, par défaut, de sorte que vous aurez besoin de affecter le résultat de retour.)Cet ajout a été fait pour améliorer la cohérence avec le reste de l'API. La nouvelle
axis
argument est analogue à lacolumns
paramètre—ils faire la même chose.rename
accepte aussi une fonction de callback qui est appelée une fois pour chaque colonne.Pour ce scénario spécifique, vous pouvez utiliser
Index.str.remplacez
Similaire à
replace
méthode de chaînes de caractères en python, les pandas de l'Index et de la Série (objet dtype seulement) définir une"vectorisé")str.replace
méthode pour les chaînes et expressions régulières en fonction de remplacement.L'avantage sur les autres méthodes, c'est que
str.replace
prend en charge regex (activé par défaut). Voir la documentation pour plus d'informations.Passage d'une liste à
set_axis
avecaxis=1
Appel
set_axis
avec une liste d'en-tête(s). La liste doit être égale à la longueur de colonnes/taille de l'index.set_axis
mutation de l'original DataFrame par défaut, mais vous pouvez spécifierinplace=False
de retour une copie modifiée.Remarque: Dans les versions futures,
inplace
par défautTrue
.Méthode De Chaînage
Pourquoi choisir
set_axis
quand on a déjà un moyen efficace de l'affectation des colonnes avecdf.columns = ...
? Comme illustré par Ted Petrou dans [cette réponse],(https://stackoverflow.com/a/46912050/4909087)set_axis
est utile lorsque vous essayez de chaîne méthodes.Comparer
Contre
L'ancien est plus naturelle et la libre circulation de la syntaxe.