web-dev-qa-db-fra.com

Importez plusieurs fichiers Excel dans python pandas et concaténez-les dans une trame de données)

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)
16
jonas

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
41
ericmjl

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()    
5
john blue
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
0
Tarun Bhavnani