Je fais actuellement un projet où je dois faire des transformations et nettoyer à partir d'un fichier Excel qui a le même tableau dans chaque feuille que chaque feuille représente un mois différent (différentes valeurs dans les tableaux).

Par conséquent, le code qui effectuera les transformations est le même que pour une feuille différente.

df_at_jan  = pd.read_excel("C:/Users/Spiros/Desktop/Reporting.xlsx",
                      sheet_name='Jan 2018')
df_at_feb  = pd.read_excel("C:/Users/Spiros/Desktop/Reporting.xlsx",
                          sheet_name='Feb 2018')

df_at_jan.drop([0,1,2],axis=0)
df_at_jan.columns = df_at_jan.iloc[3]

df_at_feb.drop([0,1,2],axis=0)
df_at_feb.columns = df_at_feb.iloc[3]

Bien sûr, je dois le faire pour tous les mois et je me demandais comment je peux le faire avec une boucle for afin de ne pas recréer le code pour chaque mois différent.

Je suis très nouveau sur Python, donc toute aide sera très appréciée.

Merci beaucoup!

-1
Spiros Armaos 12 mars 2019 à 23:15

2 réponses

Meilleure réponse

Je ne peux pas tester car vous ne donnez pas d'exemple de données, mais selon this et ce réponses, vous pouvez essayer :

xl = pd.ExcelFile('C:/Users/Spiros/Desktop/Reporting.xlsx')

sheets = xl.sheet_names

df_array = []

for sheet in sheets:
  df_temp = pd.read_excel(xl , sheet)
  df_temp = df_temp.drop([0,1,2],axis=0)
  df_temp.columns = df_temp.iloc[3]

  df_array.append(df_temp)

Les données de chaque mois seront dans une position du tableau.

Si vous avez besoin que toutes les données deviennent un seul DataFrame, faites:

df = pd.concat(df_array, ignore_index = True)
0
Terry 12 mars 2019 à 21:07

1) créer une fonction

def read_one_month(sheet_name):
   df = pd.read_excel("C:/Users/Spiros/Desktop/Reporting.xlsx",
                      sheet_name=sheet_name)
   df.drop([0,1,2],axis=0, inplace = True)
   return df

2) définir un tableau de noms de feuilles et exécuter une boucle:

df = pd.DataFrame(None)
for sheet_name in ['Jan 2018','Feb 2018']:
   df = pd.concat([df, read_one_month(sheet_name)], axis = 0, ignore_index = True)

0
Dennis Lyubyvy 12 mars 2019 à 20:55