Fractionner un Dataframe en plusieurs feuilles

J'ai un ensemble de données que j'ingère dans python et que j'effectue plusieurs transformations, mais une fois que tout le code est terminé, j'essaie de publier le fichier de sortie dans un fichier Excel, mais je veux diviser le fichier en plusieurs feuilles, chaque feuille contenant son en-tête, j'ai essayé les codes suivants :

1: Si j'utilise une colonne spécifique pour grouper par, cela produira l'erreur que la feuille est trop grande (raison pour laquelle je veux diviser par 1 million de lignes)

writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')

for key,g in icms_data.groupby('New_Loc'):
g.to_excel(writer, sheet_name=key, index=False, header=True)
writer.save()
print('done')

2 : J'ai essayé de parcourir chaque million de lignes, mais cela prend beaucoup trop de temps pour que le code s'exécute et crée le fichier Excel nécessaire :

GROUP_LENGTH = 1000000
writer = pd.ExcelWriter('test.xlsx')
for i in range(0, len(icms_data), GROUP_LENGTH):
print(i)
icms_data.iloc[i:i+GROUP_LENGTH,].to_excel(writer, sheet_name='Row {}'.format(i), header= true)
writer.save()
print('done')

Le fichier peut avoir 3M ou 4M ou 2M selon le moment où il est téléchargé, est-il possible d'avoir un code qui va à l'ensemble de la trame de données et de le diviser en morceaux de 1M et d'enregistrer ces morceaux dans différentes feuilles?


Solution du problème

Vous pouvez découper la trame de données dans une boucle for et écrire les tranches sur des feuilles :

GROUP_LENGTH = 1000000 # set nr of rows to slice df
with pd.ExcelWriter('output.xlsx') as writer:
for i in range(0, len(df), GROUP_LENGTH):
df[i: i+GROUP_LENGTH].to_excel(writer, sheet_name='Row {}'.format(i), index=False, header=True)

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"