1
votes

Fichier Excel écrasé au lieu de concat - Python - Pandas

J'essaie de contacter tous les fichiers Excel et les feuilles de calcul qu'ils contiennent en un seul en utilisant le script ci-dessous. Cela fonctionne un peu, mais le fichier excel c.xlsx est écrasé par fichier, donc seul le dernier fichier Excel est concédé, vous ne savez pas pourquoi?

import pandas as pd
import os
import ntpath
import glob

dir_path = os.path.dirname(os.path.realpath(__file__))
os.chdir(dir_path)
cdf = None
for excel_names in glob.glob('*.xlsx'):
    print(excel_names)
    df = pd.read_excel(excel_names, sheet_name=None, ignore_index=True)
    cdf = pd.concat(df.values())
    cdf.to_excel("c.xlsx", header=False, index=False)


0 commentaires

3 Réponses :


2
votes

L'idée est de créer une liste de DataFrame en compréhension de liste, mais parce que travailler avec orderdict est nécessaire concat en boucle, puis à nouveau concat pour un grand DataFrame final:

cdf = [pd.read_excel(excel_names, sheet_name=None, ignore_index=True).values() 
       for excel_names in glob.glob('files/*.xlsx')]

df = pd.concat([pd.concat(x) for x in cdf], ignore_index=True)
#print (df)

df.to_excel("c.xlsx", index=False)


5 commentaires

continuons cette discussion dans le chat .


Pourriez-vous vérifier ma question ici stackoverflow.com/questions/55182532/...


oui, je ne sais pas si le faire, la dernière fois que je tue 3 heures et aucun succès: (La question est également rejetée, je pense que la raison n'est pas de données, je ne peux pas tester votre problème.


le problème est que ma solution fonctionne sous win et non sous mac, donc des tests difficiles


désolé, je viens de réaliser que le texte que j'ai écrit dans ma question a été supprimé d'une manière ou d'une autre. J'ai publié une nouvelle question avec des données ici stackoverflow.com/questions/55182678/...



0
votes

Je viens de tester le code ci-dessous. Il fusionne les données de tous les fichiers Excel d'un dossier en un seul fichier Excel.

import pandas as pd
import numpy as np

import glob
glob.glob("C:\\your_path\\*.xlsx")

all_data = pd.DataFrame()
for f in glob.glob("C:\\your_path\\*.xlsx"):
    df = pd.read_excel(f)
    all_data = all_data.append(df,ignore_index=True)
print(all_data)
df = pd.DataFrame(all_data)
df.shape
df.to_excel("C:\\your_path\\final.xlsx", sheet_name='Sheet1')


2 commentaires

Pourrait-il également inclure le cas où certains de ces fichiers Excel ont plusieurs feuilles de calcul?


J'ai corrigé le code pour ne pas faire les choses à chaque itération qui ne doivent être faites qu'à la fin. Vous ne savez toujours pas pourquoi df = pd.DataFrame (all_data) est nécessaire si all_data est déjà un DataFrame - semble redondant.



0
votes

Je l'ai fait fonctionner en utilisant le script ci-dessous qui utilise la réponse de @ ryguy72 mais fonctionne sur toutes les feuilles de calcul ainsi que sur la ligne d'en-tête.

import pandas as pd
import numpy as np
import glob

all_data = pd.DataFrame()
for f in glob.glob("my_path/*.xlsx"):
    df = pd.read_excel(f, sheet_name=None, ignore_index=True)
    cdf = pd.concat(df.values())
    all_data = all_data.append(cdf,ignore_index=True)
print(all_data)
df = pd.DataFrame(all_data)
df.shape
df.to_excel("my_path/final.xlsx", sheet_name='Sheet1')


0 commentaires