Python 汇总 Excel 教程

使用 Python 快速处理多个 Excel 文件,提高工作效率

一、安装必要的库

在开始之前,需要安装 pandas 和 openpyxl 库。pandas 是 Python 中最强大的数据处理库,openpyxl 用于读写 Excel 文件。

# 使用 pip 安装
pip install pandas openpyxl

# 或者使用 conda 安装
conda install pandas openpyxl

二、读取单个 Excel 文件

使用 pandas 的 read_excel() 函数可以轻松读取 Excel 文件。

import pandas as pd

# 读取 Excel 文件
df = pd.read_excel('data.xlsx')

# 读取指定工作表
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# 读取前几行数据
print(df.head())

三、汇总多个 Excel 文件

当需要汇总多个相同格式的 Excel 文件时,可以使用循环读取并合并。

import pandas as pd
import os
from pathlib import Path

# 方法一:使用列表存储后合并
data_frames = []
folder_path = './excel_files'  # Excel 文件所在文件夹

for file in os.listdir(folder_path):
    if file.endswith('.xlsx') or file.endswith('.xls'):
        file_path = os.path.join(folder_path, file)
        df = pd.read_excel(file_path)
        data_frames.append(df)

# 合并所有数据
combined_df = pd.concat(data_frames, ignore_index=True)

# 方法二:使用 glob 模块(更简洁)
from glob import glob

excel_files = glob('./excel_files/*.xlsx')
data_frames = [pd.read_excel(file) for file in excel_files]
combined_df = pd.concat(data_frames, ignore_index=True)

四、合并多个工作表

如果一个 Excel 文件包含多个工作表,需要将它们合并在一起。

import pandas as pd

# 读取 Excel 文件的所有工作表
excel_file = pd.ExcelFile('data.xlsx')

# 方法一:读取所有工作表并合并
all_sheets = []
for sheet_name in excel_file.sheet_names:
    df = pd.read_excel(excel_file, sheet_name=sheet_name)
    all_sheets.append(df)

combined_df = pd.concat(all_sheets, ignore_index=True)

# 方法二:使用字典一次性读取所有工作表
all_sheets_dict = pd.read_excel('data.xlsx', sheet_name=None)
combined_df = pd.concat(all_sheets_dict.values(), ignore_index=True)

五、分组汇总数据

使用 groupby() 函数可以对数据进行分组统计。

import pandas as pd

# 假设数据包含 '部门' 和 '销售额' 列
# 按部门分组并计算总销售额
summary = df.groupby('部门')['销售额'].sum()

# 多列分组汇总
summary = df.groupby(['部门', '月份']).agg({
    '销售额': 'sum',
    '订单数': 'count',
    '平均金额': 'mean'
}).reset_index()

# 更复杂的汇总统计
summary = df.groupby('部门').agg({
    '销售额': ['sum', 'mean', 'max', 'min'],
    '订单数': 'count'
})

六、导出汇总结果

处理完数据后,可以将结果导出为 Excel 文件。

import pandas as pd

# 导出为 Excel 文件
combined_df.to_excel('汇总结果.xlsx', index=False)

# 导出到多个工作表
with pd.ExcelWriter('汇总结果.xlsx') as writer:
    combined_df.to_excel(writer, sheet_name='合并数据', index=False)
    summary.to_excel(writer, sheet_name='汇总统计', index=False)

# 导出为 CSV 文件(可选)
combined_df.to_csv('汇总结果.csv', index=False, encoding='utf-8-sig')

完整示例代码

以下是一个完整的示例,演示如何汇总多个 Excel 文件并进行统计分析。

import pandas as pd
import os
from glob import glob

def merge_excel_files(folder_path, output_file='汇总结果.xlsx'):
    """
    汇总指定文件夹中的所有 Excel 文件
    
    参数:
        folder_path: Excel 文件所在文件夹路径
        output_file: 输出文件名
    """
    # 获取所有 Excel 文件
    excel_files = glob(os.path.join(folder_path, '*.xlsx'))
    
    if not excel_files:
        print('未找到 Excel 文件')
        return
    
    # 读取所有文件
    data_frames = []
    for file in excel_files:
        try:
            df = pd.read_excel(file)
            data_frames.append(df)
            print(f'已读取: {os.path.basename(file)}')
        except Exception as e:
            print(f'读取文件 {file} 时出错: {e}')
    
    if not data_frames:
        print('没有成功读取任何文件')
        return
    
    # 合并数据
    combined_df = pd.concat(data_frames, ignore_index=True)
    
    # 保存结果
    combined_df.to_excel(output_file, index=False)
    print(f'汇总完成!共 {len(combined_df)} 行数据,已保存到 {output_file}')
    
    return combined_df

# 使用示例
if __name__ == '__main__':
    # 汇总当前目录下的所有 Excel 文件
    result = merge_excel_files('./excel_files', '汇总结果.xlsx')
    
    # 如果需要分组汇总
    if result is not None:
        summary = result.groupby('部门')['销售额'].sum()
        print('\n分组汇总结果:')
        print(summary)

注意事项

  • 确保所有 Excel 文件的列结构相同,否则合并时可能出现问题
  • 如果文件较大,建议分批处理以避免内存不足
  • 处理前建议备份原始文件
  • 注意处理 Excel 文件中的空值和格式问题
  • 使用 encoding='utf-8-sig' 导出 CSV 可以避免中文乱码
蒙ICP备2023000685号