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

目录

[1. 环境准备](#1. 环境准备)

[1.1 安装Pandas](#1.1 安装Pandas)

[1.2 准备工作](#1.2 准备工作)

[2. 基本概念](#2. 基本概念)

[2.1 Pandas简介](#2.1 Pandas简介)

[2.2 DataFrame的基本操作](#2.2 DataFrame的基本操作)

[3. 读取Excel文件](#3. 读取Excel文件)

[4. 合并多个Excel文件](#4. 合并多个Excel文件)

[4.1 获取文件列表](#4.1 获取文件列表)

[4.2 读取并合并数据](#4.2 读取并合并数据)

[4.3 处理重复数据](#4.3 处理重复数据)

[5. 数据存储](#5. 数据存储)

[6. 完整示例代码](#6. 完整示例代码)

7.代码优化

7.1用类去重新组织代码

7.2增加异常处理


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

1. 环境准备


1.1 安装Pandas

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

python 复制代码
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文件。

python 复制代码
import pandas as pd

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

4. 合并多个Excel文件


4.1 获取文件列表


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

python 复制代码
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中。

python 复制代码
# 创建一个空的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()方法来去除重复的行。

python 复制代码
# 去除重复行
combined_df = combined_df.drop_duplicates()

5. 数据存储


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

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

6. 完整示例代码


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

python 复制代码
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用类去重新组织代码

python 复制代码
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增加异常处理

python 复制代码
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是否为空,只有在有数据的情况下才进行保存操作。

相关推荐
好喜欢吃红柚子2 分钟前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python7 分钟前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
神奇夜光杯16 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
千天夜28 分钟前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼31 分钟前
Python 大数据展示屏实例
大数据·开发语言·python
羊小猪~~35 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
放飞自我的Coder1 小时前
【python ROUGE BLEU jiaba.cut NLP常用的指标计算】
python·自然语言处理·bleu·rouge·jieba分词
小c君tt1 小时前
MFC中Excel的导入以及使用步骤
c++·excel·mfc
正义的彬彬侠1 小时前
【scikit-learn 1.2版本后】sklearn.datasets中load_boston报错 使用 fetch_openml 函数来加载波士顿房价
python·机器学习·sklearn
张小生1802 小时前
PyCharm中 argparse 库 的使用方法
python·pycharm