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()

以上。

物联沃分享整理
物联沃-IOTWORD物联网 » Python实现多个Excel文件多个sheet表的分别合并

发表评论