Pandas教程:使用Pandas合并多个Excel文件

目录

1. 环境准备

1.1 安装Pandas

1.2 准备工作

2. 基本概念

2.1 Pandas简介

2.2 DataFrame的基本操作

3. 读取Excel文件

4. 合并多个Excel文件

4.1 获取文件列表

4.2 读取并合并数据

4.3 处理重复数据

5. 数据存储

6. 完整示例代码

7.代码优化

7.1用类去重新组织代码 

 7.2增加异常处理


在数据处理和分析中,合并多个Excel文件是一项常见的任务。本文将详细介绍如何使用Python库Pandas来完成这一任务。我们将从基本概念入手,逐步深入,最终通过实战示例完成多个.xlsx文件的合并。

1. 环境准备


1.1 安装Pandas

在开始之前,确保你已经安装了Pandas库。如果还没有安装,可以使用以下命令进行安装:

pip install pandas openpyxl

1.2 准备工作

确保你有一个包含多个Excel文件的文件夹。每个Excel文件的结构应当相似,例如,它们都有相同的列名。

2. 基本概念


2.1 Pandas简介

Pandas是一个强大的数据分析和数据处理库,它提供了灵活的数据结构,特别是DataFrame,这使得数据的操作变得简单高效。

2.2 DataFrame的基本操作

在Pandas中,DataFrame是一个二维标签数据结构,类似于表格。你可以使用DataFrame进行数据的读取、写入、筛选和合并等操作。

3. 读取Excel文件


在合并Excel文件之前,我们需要先了解如何读取单个Excel文件。我们可以使用pd.read_excel()函数来读取Excel文件。

import pandas as pd

# 读取单个Excel文件
df = pd.read_excel('path/to/your/file.xlsx')
print(df.head()) # 显示前5行数据

4. 合并多个Excel文件


4.1 获取文件列表


首先,我们需要获取文件夹中所有Excel文件的列表。我们可以使用os库来实现这一功能。

import os

# 获取指定目录下的所有xlsx文件
folder_path = 'path/to/your/folder'
files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')]

4.2 读取并合并数据


现在,我们可以使用一个循环来读取每个文件,并将其合并到一个DataFrame中。

# 创建一个空的DataFrame
combined_df = pd.DataFrame()

# 读取每个文件并合并
for file in files:
    file_path = os.path.join(folder_path, file)
    df = pd.read_excel(file_path)
    combined_df = pd.concat([combined_df, df], ignore_index=True)

# 查看合并后的数据
print(combined_df.head())

4.3 处理重复数据


合并数据时,可能会出现重复的行。我们可以使用drop_duplicates()方法来去除重复的行。

# 去除重复行
combined_df = combined_df.drop_duplicates()

5. 数据存储


合并完成后,我们需要将最终的数据保存到一个新的Excel文件中。我们可以使用to_excel()方法进行保存。

# 将合并后的数据保存为新的Excel文件
combined_df.to_excel('path/to/your/combined_file.xlsx', index=False)

6. 完整示例代码


结合上述所有步骤,下面是一个完整的示例代码,用于合并文件夹中所有的Excel文件。

import os
import pandas as pd

# 指定文件夹路径
folder_path = 'path/to/your/folder'

# 获取所有xlsx文件
files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')]

# 创建一个空的DataFrame
combined_df = pd.DataFrame()

# 读取每个文件并合并
for file in files:
    file_path = os.path.join(folder_path, file)
    df = pd.read_excel(file_path)
    combined_df = pd.concat([combined_df, df], ignore_index=True)

# 去除重复行
combined_df = combined_df.drop_duplicates()

# 保存合并后的数据
combined_df.to_excel('path/to/your/combined_file.xlsx', index=False)

print("合并完成,文件已保存。")

7.代码优化


7.1用类去重新组织代码 

import os
import pandas as pd

class ExcelMerger:
    def __init__(self, folder_path, output_file):
        """初始化ExcelMerger类
        
        参数:
        folder_path: 包含待合并Excel文件的文件夹路径
        output_file: 合并后输出的Excel文件名
        """
        self.folder_path = folder_path
        self.output_file = output_file
        self.combined_df = pd.DataFrame()

    def get_files(self):
        """获取文件夹下所有的xlsx文件"""
        return [f for f in os.listdir(self.folder_path) if f.endswith('.xlsx')]

    def read_and_combine(self):
        """读取并合并所有Excel文件"""
        files = self.get_files()
        for file in files:
            file_path = os.path.join(self.folder_path, file)
            df = pd.read_excel(file_path)
            self.combined_df = pd.concat([self.combined_df, df], ignore_index=True)

    def remove_duplicates(self):
        """去除合并后的重复数据"""
        self.combined_df = self.combined_df.drop_duplicates()

    def save_to_excel(self):
        """将合并后的数据保存为Excel文件"""
        self.combined_df.to_excel(self.output_file, index=False)

    def merge(self):
        """执行合并操作的主方法"""
        self.read_and_combine()
        self.remove_duplicates()
        self.save_to_excel()
        print(f"合并完成,文件已保存到 {self.output_file}。")

# 使用示例
if __name__ == "__main__":
    folder_path = 'path/to/your/folder'
    output_file = 'path/to/your/combined_file.xlsx'
    
    merger = ExcelMerger(folder_path, output_file)
    merger.merge()

优化说明

  1. 封装性:将代码逻辑封装在ExcelMerger类中,提高了代码的模块化程度。
  2. 方法分离:将每个功能分离成不同的方法,使得逻辑更加清晰,便于维护和扩展。
  3. 易于使用:用户只需实例化ExcelMerger类,然后调用merge()方法即可完成合并操作。

 7.2增加异常处理

import os
import pandas as pd

class ExcelMerger:
    def __init__(self, folder_path, output_file):
        """初始化ExcelMerger类
        
        参数:
        folder_path: 包含待合并Excel文件的文件夹路径
        output_file: 合并后输出的Excel文件名
        """
        self.folder_path = folder_path
        self.output_file = output_file
        self.combined_df = pd.DataFrame()

    def get_files(self):
        """获取文件夹下所有的xlsx文件"""
        try:
            files = [f for f in os.listdir(self.folder_path) if f.endswith('.xlsx')]
            if not files:
                raise FileNotFoundError("该文件夹中没有找到任何Excel文件。")
            return files
        except FileNotFoundError as e:
            print(e)
            return []

    def read_and_combine(self):
        """读取并合并所有Excel文件"""
        files = self.get_files()
        for file in files:
            file_path = os.path.join(self.folder_path, file)
            try:
                df = pd.read_excel(file_path)
                self.combined_df = pd.concat([self.combined_df, df], ignore_index=True)
                print(f"成功读取文件: {file}")
            except Exception as e:
                print(f"读取文件 {file} 时发生错误: {e}")

    def remove_duplicates(self):
        """去除合并后的重复数据"""
        initial_count = self.combined_df.shape[0]
        self.combined_df = self.combined_df.drop_duplicates()
        final_count = self.combined_df.shape[0]
        print(f"去除重复行: 从 {initial_count} 行减少到 {final_count} 行")

    def save_to_excel(self):
        """将合并后的数据保存为Excel文件"""
        try:
            self.combined_df.to_excel(self.output_file, index=False)
            print(f"合并的数据已保存到 {self.output_file}")
        except Exception as e:
            print(f"保存文件时发生错误: {e}")

    def merge(self):
        """执行合并操作的主方法"""
        self.read_and_combine()
        self.remove_duplicates()
        if not self.combined_df.empty:
            self.save_to_excel()
        else:
            print("没有合并的数据,无法保存文件。")

# 使用示例
if __name__ == "__main__":
    folder_path = 'path/to/your/folder'
    output_file = 'path/to/your/combined_file.xlsx'
    
    merger = ExcelMerger(folder_path, output_file)
    merger.merge()

优化说明

  1. 异常捕获

    • get_files方法中捕获FileNotFoundError,如果文件夹内没有Excel文件,将给出提示。
    • read_and_combine方法中捕获读取Excel文件时的任何异常,以确保即使某个文件无法读取,程序仍然能够继续处理其他文件。
    • save_to_excel方法中捕获保存文件时的异常,以处理可能的文件写入错误。
  2. 反馈信息

        在每个主要步骤中添加了打印信息,以便用户了解当前的处理状态和结果。
  3. 数据检查

        在merge方法中,检查合并后的DataFrame是否为空,只有在有数据的情况下才进行保存操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旦莫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值