将包括工作表的多个exe文件导入1个excel文件

问题描述

我有5个Excel文件,每个文件包含8张纸,每张纸包含30行。因此,这意味着1个文件共有30 x 8 = 240行。我可以使用快速技巧将所有这5个文件包括工作表)合并为1个Excel文件,总共240 x 5行= 1200行吗?

这是我当前的代码

import os
import pandas as pd

files = os.listdir('c:\data\KM\Desktop\my_folder') 
 
os.chdir(r'c:\data\KM\Desktop\my_folder')

df = pd.DataFrame()

for file in files:
    if file.endswith('.xlsx'):
        df = df.append(pd.read_excel(file))
df.head() 
df.to_excel('all_files.xlsx')  

现在有了这段代码我有两个问题:

  1. 从所有文件中我只能得到第一张纸。因此,它总共可以合并8张纸,而不是40张(8x5):(
  2. 对于每个文件,它还会复制列标题,这仅需要对第一个文件执行。所有文件和工作表具有相同的列名。

感谢您的帮助。

解决方法

对所有工作表使用read_excelsheet_name=None,并通过concat合并在一起以获取DataFrame列表,最后一次将其用于一个大DataFrame:

import glob

files = glob.glob(r'c:/data/KM/Desktop/my_folder/*.xlsx') 
dfs = (pd.concat(pd.read_excel(fp,sheet_name=None)) for fp in files)
dfbig = pd.concat(dfs,ignore_index=True)

编辑:要删除最后一个工作表名,请将orderdict转换为DataFrame列表,并通过索引来删除最后一个:

files = glob.glob(r'D:/Dropbox/work-joy/so/files/*.xlsx')
dfs = (pd.concat([v for k,v in pd.read_excel(fp,sheet_name=None).items()][:-1]) 
                 for fp in files)
df = pd.concat(dfs,ignore_index=True)