Je voudrais lire plusieurs fichiers Excel à partir d'un répertoire dans pandas et les concaténer dans une grande trame de données. Je n'ai pas pu le comprendre cependant. J'ai besoin d'aide avec la boucle for et la construction d'un dataframe concaténé: Voici ce que j'ai jusqu'à présent:
import sys
import csv
import glob
import pandas as pd
# get data file names
path =r'C:\DRO\DCL_rawdata_files\excelfiles'
filenames = glob.glob(path + "/*.xlsx")
dfs = []
for df in dfs:
xl_file = pd.ExcelFile(filenames)
df=xl_file.parse('Sheet1')
dfs.concat(df, ignore_index=True)
Comme mentionné dans les commentaires, une erreur que vous faites est que vous parcourez une liste vide.
Voici comment je le ferais, en utilisant un exemple de 5 fichiers Excel identiques qui sont ajoutés les uns après les autres.
(1) Importations:
import os
import pandas as pd
(2) Lister les fichiers:
path = os.getcwd()
files = os.listdir(path)
files
Production:
['.DS_Store',
'.ipynb_checkpoints',
'.localized',
'Screen Shot 2013-12-28 at 7.15.45 PM.png',
'test1 2.xls',
'test1 3.xls',
'test1 4.xls',
'test1 5.xls',
'test1.xls',
'Untitled0.ipynb',
'Werewolf Modelling',
'~$Random Numbers.xlsx']
(3) Choisissez les fichiers 'xls':
files_xls = [f for f in files if f[-3:] == 'xls']
files_xls
Production:
['test1 2.xls', 'test1 3.xls', 'test1 4.xls', 'test1 5.xls', 'test1.xls']
(4) Initialiser la trame de données vide:
df = pd.DataFrame()
(5) Faire une boucle sur la liste des fichiers à ajouter au cadre de données vide:
for f in files_xls:
data = pd.read_Excel(f, 'Sheet1')
df = df.append(data)
(6) Profitez de votre nouvelle trame de données.: -)
df
Production:
Result Sample
0 a 1
1 b 2
2 c 3
3 d 4
4 e 5
5 f 6
6 g 7
7 h 8
8 i 9
9 j 10
0 a 1
1 b 2
2 c 3
3 d 4
4 e 5
5 f 6
6 g 7
7 h 8
8 i 9
9 j 10
0 a 1
1 b 2
2 c 3
3 d 4
4 e 5
5 f 6
6 g 7
7 h 8
8 i 9
9 j 10
0 a 1
1 b 2
2 c 3
3 d 4
4 e 5
5 f 6
6 g 7
7 h 8
8 i 9
9 j 10
0 a 1
1 b 2
2 c 3
3 d 4
4 e 5
5 f 6
6 g 7
7 h 8
8 i 9
9 j 10
cela fonctionne avec python 2.x
être dans le répertoire où se trouvent les fichiers Excel
voir http://pbpython.com/Excel-file-combine.html
import numpy as np
import pandas as pd
import glob
all_data = pd.DataFrame()
for f in glob.glob("*.xlsx"):
df = pd.read_Excel(f)
all_data = all_data.append(df,ignore_index=True)
# now save the data frame
writer = pd.ExcelWriter('output.xlsx')
all_data.to_Excel(writer,'sheet1')
writer.save()
import pandas as pd
import os
os.chdir('...')
#read first file for column names
fdf= pd.read_Excel("first_file.xlsx", sheet_name="sheet_name")
#create counter to segregate the different file's data
fdf["counter"]=1
nm= list(fdf)
c=2
#read first 1000 files
for i in os.listdir():
print(c)
if c<1001:
if "xlsx" in i:
df= pd.read_Excel(i, sheet_name="sheet_name")
df["counter"]=c
if list(df)==nm:
fdf=fdf.append(df)
c+=1
else:
print("headers name not match")
else:
print("not xlsx")
fdf=fdf.reset_index(drop=True)
#relax