将包括工作表在内的多个 Excel 文件导入 1 个 excel 文件
Importing multiple exce files including sheets into 1 excel file
我有5个Excel文件,每个文件包含8个sheets,每个sheet包含大约30行。所以这意味着 1 个文件总共有 30 x 8 = 240 行。有没有我可以使用的快速技巧将所有这 5 个文件(包括 sheets)组合成 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')
现在使用这段代码我遇到了 2 个问题:
- 从所有文件中我只得到第一个 sheet。所以它总共合并了 8 sheets 而不是 40 (8x5) :(
- 对于每个文件,它还复制列 headers,这只需要为第一个文件完成。所有文件和 sheet 都具有相同的列名。
感谢大家的帮助。
将read_excel
with sheet_name=None
for all sheets, join together by 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)
我有5个Excel文件,每个文件包含8个sheets,每个sheet包含大约30行。所以这意味着 1 个文件总共有 30 x 8 = 240 行。有没有我可以使用的快速技巧将所有这 5 个文件(包括 sheets)组合成 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')
现在使用这段代码我遇到了 2 个问题:
- 从所有文件中我只得到第一个 sheet。所以它总共合并了 8 sheets 而不是 40 (8x5) :(
- 对于每个文件,它还复制列 headers,这只需要为第一个文件完成。所有文件和 sheet 都具有相同的列名。
感谢大家的帮助。
将read_excel
with sheet_name=None
for all sheets, join together by 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)