2
votes

Comment changer les noms de colonnes par des colonnes paires / impaires en Python

J'ai un dataframe relativement volumineux avec plus de cent colonnes. Actuellement, seule la première colonne a reçu un nom et le dataframe ressemble à:

Event Name1 Job1 Name2 Job2 Name3 Job3 Name4 Job4 Name5 Job5 Name6 Job6 ...

Je voudrais renommer les colonnes pour qu'elles ressemblent à

Event 0 1 2 3 4 5 6 7 8 9 10 11 ...


3 commentaires

Veuillez ajouter le code que vous avez essayé dans votre question, afin qu'il soit plus facile pour les gens de détecter le problème.


Je comprends. C'est juste que le code que j'ai écrit est vraiment foiré, et je ne pense pas vraiment qu'il aurait de la valeur ... Mais je le garderai à l'esprit la prochaine fois que je poserai une question :)


Je ne pense pas vraiment que cela aurait une quelconque valeur, cela aura de la valeur, car 1) les gens peuvent voir que vous avez essayé quelque chose et vous ne leur demandez pas seulement pour écrire du code pour vous. 2) Ce sera beaucoup plus facile de résoudre le problème. Je garderai cela à l'esprit la prochaine fois que je poserai une question, parfait!


3 Réponses :


1
votes

Voici un autre exemple:

   Event  Name1  Job1  Name2  Job2  Name3
0      1      1     1      1     1      1
1      2      2     2      2     2      2
2      3      3     3      3     3      3
import pandas as pd

a = {}
a["Event"] = [1,2,3]
a[0] = [1,2,3]
a[1] = [1,2,3]
a[2] = [1,2,3]
a[3] = [1,2,3]
a[4] = [1,2,3]

df = pd.DataFrame(a)

name = 1
job = 1

for i in df.keys()[1:]:
    if i%2==0:
        df = df.rename(columns={i: "Name"+str(name)})
        name+=1
    else:
        df = df.rename(columns={i: "Job"+str(job)})
        job+=1

print(df)


0 commentaires

0
votes

Nous devons faire trois choses:

  1. Obtenir la liste des colonnes actuelles.
  2. Créez une nouvelle liste en utilisant la liste que nous avons obtenue à l ' étape 1 .
  3. Attribuez la nouvelle liste aux colonnes de notre DataFrame .

1:

In [9]: df.columns = new_cols

In [10]: df
Out[10]:
Empty DataFrame
Columns: [Event, Name1, Job1, Name2, Job2, Name3, Job3, Name4, Job4, Name5, Job5, Name6, Job6]
Index: []

2:

In [4]: num_cols = len(list(df))

In [5]: num_cols
Out[5]: 13

In [6]: new_cols = []
In [7]: for i in range(num_cols):
    ...:     if i == 0:
    ...:         new_cols.append("Event")
    ...:     elif i % 2 == 0:
    ...:         new_cols.append(f'Job{int(i/2)}')
    ...:     else:
    ...:         new_cols.append(f'Name{int((i+1)/2)}')

In [8]: new_cols
Out[8]:
['Event',
 'Name1',
 'Job1',
 'Name2',
 'Job2',
 'Name3',
 'Job3',
 'Name4',
 'Job4',
 'Name5',
 'Job5',
 'Name6',
 'Job6']

3:

In [1]: import pandas as pd
In [2]: df = pd.DataFrame(columns=['Event', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11'])
In [3]: df
Out[3]:
Empty DataFrame
Columns: [Event, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
Index: []


4 commentaires

C'est vraiment clair. Cela aide également à comprendre d'autres réponses que j'ai vues en lisant des questions similaires. Merci beaucoup!


@TaoHan Salut, votre problème est-il résolu? Si tel est le cas, n'hésitez pas à accepter une réponse.


Salut Amir. Oui, c'est résolu et j'ai voté mais mon score est trop faible (avant 15) donc le vote n'est pas affiché ....


@TaoHan Vous pouvez toujours accepter une réponse.



0
votes

Que diriez-vous d'utiliser 2 listcomp et zip et from_iterable pour aplatir zip:

from itertools import chain

num_cols = 20
name = ['Name'+str(i) for i in range(1, num_cols)]
job = ['Job'+str(i)  for i in range(1, num_cols )]

df.columns = ['Event'] + list(chain.from_iterable(zip(name, job)))

Out[1918]:
['Event',
 'Name1',
 'Job1',
 'Name2',
 'Job2',
 'Name3',
 'Job3',
 'Name4',
 'Job4',
 'Name5',
 'Job5',
 'Name6',
 'Job6',
 'Name7',
 'Job7',
 'Name8',
 'Job8',
 'Name9',
 'Job9',
 'Name10',
 'Job10',
 'Name11',
 'Job11',
 'Name12',
 'Job12',
 'Name13',
 'Job13',
 'Name14',
 'Job14',
 'Name15',
 'Job15',
 'Name16',
 'Job16',
 'Name17',
 'Job17',
 'Name18',
 'Job18',
 'Name19',
 'Job19']


0 commentaires