为了账号安全,请及时绑定邮箱和手机立即绑定

python将多个excel中的所有工作表附加到pandas数据框中的有效方法

python将多个excel中的所有工作表附加到pandas数据框中的有效方法

拉风的咖菲猫 2022-01-11 15:49:08
我有大约 20++ xlsx 文件,每个 xlsx 文件中可能包含不同数量的工作表。但谢天谢地,所有列都是所有工作表和所有 xlsx 文件中的一部分。通过参考这里“,我有了一些想法。我一直在尝试几种方法将所有 excel 文件(所有工作表)导入并附加到单个数据框(大约 400 万行记录)中。注意:我也在这里检查过“,但它只包括文件级别、我的构成文件和工作表级别。我试过下面的代码# import all necessary packageimport pandas as pdfrom pathlib import Pathimport globimport sys# set source pathsource_dataset_path = "C:/Users/aaa/Desktop/Sample_dataset/"source_dataset_list = glob.iglob(source_dataset_path + "Sales transaction *")for file in source_dataset_list:#xls = pd.ExcelFile(source_dataset_list[i])    sys.stdout.write(str(file))    sys.stdout.flush()    xls = pd.ExcelFile(file)    out_df = pd.DataFrame() ## create empty output dataframe    for sheet in xls.sheet_names:        sys.stdout.write(str(sheet))        sys.stdout.flush() ## # View the excel files sheet names        #df = pd.read_excel(source_dataset_list[i], sheet_name=sheet)        df = pd.read_excel(file, sheetname=sheet)        out_df = out_df.append(df)  ## This will append rows of one dataframe to another(just like your expected output)问题:我的方法就像首先读取每个 excel 文件并在其中获取工作表列表,然后加载工作表并附加所有工作表。循环似乎不是很有效,特别是当每个追加的数据大小都增加时。有没有其他有效的方法可以从多个 excel 文件中导入和附加所有工作表?
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

使用sheet_name=None在read_excel从所有sheetnames创建DataFrames的回报orderdict,然后联合起来concat,并最后DataFrame.append到最后DataFrame:


out_df = pd.DataFrame()

for f in source_dataset_list:

    df = pd.read_excel(f, sheet_name=None)

    cdf = pd.concat(df.values())

    out_df = out_df.append(cdf,ignore_index=True)

另一种解决方案:


cdf = [pd.read_excel(excel_names, sheet_name=None).values() 

            for excel_names in source_dataset_list]


out_df = pd.concat([pd.concat(x) for x in cdf], ignore_index=True)


查看完整回答
反对 回复 2022-01-11
?
烙印99

TA贡献1829条经验 获得超13个赞

如果我正确理解了您的问题,那么设置sheet_name=None就pd.read_excel可以了。


import os

import pandas as pd


path = "C:/Users/aaa/Desktop/Sample_dataset/"


dfs = [

    pd.concat(pd.read_excel(path + x, sheet_name=None))

    for x in os.listdir(path)

    if x.endswith(".xlsx") or x.endswith(".xls")

]


df = pd.concat(dfs)


查看完整回答
反对 回复 2022-01-11
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

如果您想阅读所有表格,我有一个非常直接的解决方案。


import pandas as pd

df = pd.concat(pd.read_excel(path+file_name, sheet_name=None), 

               ignore_index=True)


查看完整回答
反对 回复 2022-01-11
  • 3 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信