Comment puis-je renommer plusieurs colonnes d'un dataframe à l'aide de leur index? Par exemple, je veux renommer les colonnes aux positions 5,6,7,8 en «cinq», «six», «sept», «huit» respectivement. Je ne veux pas entrer les clés dans le dictionnaire individuellement.

1
nona 2 juin 2020 à 23:12

3 réponses

Meilleure réponse

Dans le cas où vous avez déjà un dictionnaire, vous pouvez utiliser rename pour mapper aux nouvelles valeurs d'axe:

df = pd.DataFrame(columns=range(10))
d = {5:'five', 6:'six', 7:'seven', 8:'eight'}
df = df.rename(d, axis=1)
# Index([0, 1, 2, 3, 4, 'five', 'six', 'seven', 'eight', 9], dtype='object')

Ou, comme le souligne @ ch3ster, renommer prend à la fois les paramètres index et column permettant de renommer les deux indépendamment:

df = df.rename(columns=d)

Dans le cas où vous connaissez la plage de colonnes à renommer et avez une liste de nouveaux noms de colonnes, vous pouvez créer un dictionnaire comme et rename avec:

l = ['five', 'six', 'seven', 'eight', 'nine']
df = df.rename(columns=dict(zip(range(5,9), l)))
2
yatu 2 juin 2020 à 20:34

Si vous ne souhaitez pas utiliser rename avec un dict, comme vous l'avez mentionné, vous pouvez également essayer de renommer les colonnes de cette façon:

column_names = list(df.columns)
column_names[4:8] = ['five', 'six', 'seven', 'eight']
df.columns = column_names

Comme cela a déjà été mentionné, vous n'avez pas à renommer une colonne à la fois avec dict. Vous pouvez tout faire en même temps:

my_dict = {5: 'five', 6: 'six', 7: 'seven'} # etc.
df.rename(columns = my_dict, inplace = True)
1
Caleb Courtney 4 juin 2020 à 23:17

Sur la base de votre déclaration I don't want to enter the keys in the dictionary individually.:

Vous pouvez utiliser un module appelé num2words.

De la documentation:

num2words est une bibliothèque qui convertit des nombres comme 42 en mots comme forty-two.

Usage:

from num2words import num2words
num2words(10)

Production:

ten

Faites pip install num2words

Votre code final doit être:

from num2words import num2words

d = {i: num2words(i) for i in range(100)} 
df = df.rename(d, axis=1)
1
Mayank Porwal 2 juin 2020 à 21:04