工作中遇到需要合并多个sheet表的逐月数据的excel文件。即对多月数据,依据sheet表进行合并,最终形成年度数据。(该方法不要求文件名有规律,也不要求sheet表名称有规律)
如:文件结构
以下为处理方法:
首先自动获取所有的sheet名:
# 导入所需包import pandas as pdimport glob ## 用于循环目录文件# 先读取一个excel文件,获取其全部的sheet名df = pd.ExcelFile('./test.xlsx')print(df.sheet_names)## 结果## ['Sheet1', 'Sheet2', 'Sheet3']
合并处理:
对每个sheet名,循环遍历所有excel文件,读取该sheet表内容,进行合并。并将合并后的结果,写进 concat_path 文件中相应的sheet里。
# 设置合并后的数据要写入的excel文件路径concat_path = './合并后文件.xlsx'writer = pd.ExcelWriter(concat_path)sheet_names = df.sheet_names# 获取 dir_path 路径下的所有 '.xlsx' 格式文件的路径files=glob.glob(dir_path + '/*.xlsx')print(files)## 输出:## ['D:\\test\\data\\test_data1.xlsx', 'D:\\test\\data\\test_data2.xlsx']"""对每个sheet名,循环遍历excel文件,读取该sheet表,进行合并,并将合并后的结果,写进 concat_path 中相应的sheet里"""## 对每个sheetfor sheet in sheet_names: ## 创建一个空数据框,用于存储同一个sheet名对应的所有文件中的数据 test_df = pd.DataFrame() ## 对每个文件 for file in files: with pd.ExcelFile(file) as xlsx: ## 读取该sheet表内容,header=5 表示第6行是列名,数据从第7行开始 row_df = pd.read_excel(xlsx, sheet, header=5) if not int(row_df.size) > 0: # 判断该sheet是否空白 continue else: # 有内容则进行合并 test_df = pd.concat([test_df, row_df], axis=0) # 按行拼接 # 写入新excel文件的相应sheet表中 test_df.to_excel(writer,sheet_name=sheet,index=False)writer.save()
以上。
来源地址:https://blog.csdn.net/weixin_53848907/article/details/131635156