问题描述
我有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')
感谢您的帮助。
解决方法
对所有工作表使用read_excel
和sheet_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)