python——对多个Excel文件的多个sheet表分别合并

        工作中遇到需要合并多个sheet表的逐月数据的excel文件。即对多月数据,依据sheet表进行合并,最终形成年度数据。(该方法不要求文件名有规律,也不要求sheet表名称有规律)

如:文件结构

 

 

以下为处理方法:

1. 首先自动获取所有的sheet名:

# 导入所需包
import pandas as pd
import glob  
## 用于循环目录文件

# 先读取一个excel文件,获取其全部的sheet名
df = pd.ExcelFile('./test.xlsx')
print(df.sheet_names)

## 结果
## ['Sheet1', 'Sheet2', 'Sheet3']

2. 合并处理:

        对每个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里
"""
## 对每个sheet
for 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()

以上。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值