J'ai un dataframe appelé data
. Comment renommer le seul en-tête de colonne? Par exemple gdp
pour 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
Réponses:
Le
rename
spectacle qu'il accepte un dict en tant que paramètre pourcolumns
que vous passiez simplement un dict avec une seule entrée.Voir aussi lié
la source
inplace
paramètre, si elle ignore ce paramètre, alors c'est un bogue, pouvez-vous faire des minutages avec et sans le paramètre, essayez également quelque chose commenew_df = df.rename(columns={'new_name':'old_name'})
et voir si cela est plus rapide ou pasinplace
paramètre a presque doublé le temps de 14 secondes à 26 secondes. Mais 14 secondes sont encore assez longues juste pour changer de tête ..Une implémentation beaucoup plus rapide serait à utiliser
list-comprehension
si vous devez renommer une seule colonne.Si vous devez renommer plusieurs colonnes, utilisez des expressions conditionnelles telles que:
Ou, construisez un mappage en utilisant a
dictionary
et effectuez l' opérationlist-comprehension
avec elleget
en définissant la valeur par défaut comme l'ancien nom:Horaires:
la source
pd.merge_asof()
À partir de la v0.24 +, pour renommer une (ou plusieurs) colonnes à la fois,
DataFrame.rename()
avecaxis=1
ouaxis='columns'
(l'axis
argument a été introduit dansv0.21
.Index.str.replace()
pour le remplacement basé sur une chaîne / expression régulière.Si vous devez renommer TOUTES les colonnes à la fois,
DataFrame.set_axis()
méthode avecaxis=1
. Passez une séquence de type liste. Des options sont également disponibles pour la modification sur place.rename
avecaxis=1
Avec 0.21+, vous pouvez maintenant spécifier un
axis
paramètre avecrename
:(Notez que ce
rename
n'est pas en place par défaut, vous devrez donc réattribuer le résultat .)Cet ajout a été fait pour améliorer la cohérence avec le reste de l'API. Le nouvel
axis
argument est analogue aucolumns
paramètre - ils font la même chose.rename
accepte également un rappel qui est appelé une fois pour chaque colonne.Pour ce scénario spécifique, vous voudriez utiliser
Index.str.replace
Semblable à la
replace
méthode des chaînes en python, les pandas Index et Series (object dtype uniquement) définissent unestr.replace
méthode ("vectorisée") pour le remplacement basé sur les chaînes et les expressions régulières.L'avantage de cela par rapport aux autres méthodes est qu'il
str.replace
prend en charge les expressions régulières (activé par défaut). Consultez la documentation pour plus d'informations.Passer une liste à
set_axis
avecaxis=1
Appel
set_axis
avec une liste d'en-tête (s). La liste doit être égale en longueur à la taille des colonnes / index.set_axis
mute le DataFrame d'origine par défaut, mais vous pouvez spécifierinplace=False
de renvoyer une copie modifiée.Remarque: dans les versions futures,
inplace
sera par défautTrue
.Chaînage de méthodes
Pourquoi choisir
set_axis
quand nous avons déjà une manière efficace d'attribuer des colonnes avecdf.columns = ...
? Comme l'a montré Ted Petrou dans [cette réponse], ( https://stackoverflow.com/a/46912050/4909087 )set_axis
est utile lorsque vous essayez d'enchaîner des méthodes.Comparer
Contre
Le premier est une syntaxe plus naturelle et fluide.
la source
Il existe au moins cinq façons différentes de renommer des colonnes spécifiques dans les pandas, et je les ai énumérées ci-dessous avec des liens vers les réponses originales. J'ai également chronométré ces méthodes et j'ai trouvé qu'elles fonctionnaient à peu près de la même manière (bien que YMMV dépend de votre ensemble de données et de votre scénario). Le cas de test ci-dessous consiste à renommer les colonnes
A
M
N
Z
enA2
M2
N2
Z2
dans une trame de données avec des colonnesA
pourZ
contenir un million de lignes.Production:
Utilisez la méthode la plus intuitive pour vous et la plus simple à implémenter dans votre application.
la source