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 pdclass ExcelMerger:def __init__(self, folder_path, output_file):"""初始化ExcelMerger类参数:folder_path: 包含待合并Excel文件的文件夹路径output_file: 合并后输出的Excel文件名"""self.folder_path = folder_pathself.output_file = output_fileself.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 pdclass ExcelMerger:def __init__(self, folder_path, output_file):"""初始化ExcelMerger类参数:folder_path: 包含待合并Excel文件的文件夹路径output_file: 合并后输出的Excel文件名"""self.folder_path = folder_pathself.output_file = output_fileself.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 filesexcept 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是否为空,只有在有数据的情况下才进行保存操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/52435.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3动态引入图片不显示问题

方法1.(打包后动态引用的图片未被打包入工程中,webpack,vite) 1.图片放到public 目录会更省事,不管是开发环境还是生产环境,可以始终以根目录保持图片路径的一致. 假设: 静态文件目录:src/assets/images/ 我们的目标静态文件在 …

Python实现打印http请求信息例子解析

示例代码 import http.clientdef print_http_info(host, path):conn http.client.HTTPConnection(host)method GETurl pathprint(f"{- * 30} 请求信息 {- * 30}")print(f"主机: {host}")print(f"方法: {method}")print(f"URL: {url}&qu…

深入理解Spring Boot日志框架与配置

目录 Spring Boot日志框架概述Spring Boot默认日志框架:Logback日志配置文件日志级别的调整日志输出配置日志格式化日志轮转和归档集成其他日志框架日志管理工具最佳实践总结 Spring Boot日志框架概述 Spring Boot 支持多种日志框架,如 Logback、Log4…

使用HAL库实现按键控制LED和蜂鸣器

下载STM32CubeMX实现项目的初始配置(寄存器操作),下载keil对程序进行编译烧写 在STM32CubeMX中将PB0/PB1设置为输入引脚作为按键,PA6/PA4设置为输出引脚作为led和Beep,将按键引脚设置为上拉输入: 创建项目完成后在kei…

【jvm】程序计数器的特征

目录 1. 说明2. 线程私有3. 存储指令地址4. 不会发生内存溢出5. 生命周期与线程相同 1. 说明 1.JVM(Java虚拟机)中的程序计数器(Program Counter Register),简称PC寄存器,具有几个显著的特征,这…

C语言 | Leetcode C语言题解之第365题水壶问题

题目&#xff1a; 题解&#xff1a; bool canMeasureWater(int jug1Capacity, int jug2Capacity, int targetCapacity) {int j1 jug1Capacity < jug2Capacity ? jug1Capacity : jug2Capacity, j2 jug1Capacity > jug2Capacity ? jug1Capacity : jug2Capacity;if (ta…

Umi-OCR 文字识别工具

免费开源的离线orc识别功能 git地址 感谢大佬的贡献 Umi-OCR 文字识别工具 使用说明 • 下载地址 • 更新日志 • 提交Bug 免费&#xff0c;开源&#xff0c;可批量的离线OCR软件 适用于 Windows7 x64 、Linux x64 免费&#xff1a;本项目所有代码开源&#x…

推荐系统三十六式学习笔记:产品篇36 | 组建推荐团队及工程师的学习路径

目录 团队组建个人成长总结 如果你是老板&#xff0c;或者是公司里的推荐系统包工头&#xff0c;那么你一定会关心&#xff1a;要凑齐多少人才能开始搬砖&#xff1f; 一个推荐系统复杂度没有上限&#xff0c;但是有最低标准&#xff0c;所以下面在估算推荐系统团队规模时&…

SpringBoot (面试篇)

什么是SpringBoot 通过SpringBoot&#xff0c;可以轻松的创建独立的&#xff0c;基于生产级别的Spring的应用程序&#xff0c;您可以“运行”它们。大多数SpringBoot应用程序要最少的Sprig配置 为什么要用SpringBoot 快速开发 快速整合 配置简化 内嵌服务容器 SpringBoot与…

Verilog刷题笔记59

题目: Exams/m2014 q6c 解题&#xff1a; module top_module (input [6:1] y,input w,output Y2,output Y4);assign Y2y[1]&w0;assign Y4(y[2]&w1)|(y[3]&w1)|(y[5]&w1)|(y[6]&w1);endmodule结果正确: 注意点: 起初&#xff0c;我的代码有错误,代码如下…

9 正则表达式:Java爬虫和正则表达式、String中的正则表达式方法(基本语法7)

文章目录 前言一、正则表达式1 [ ] 语法(1)[ABC] 和 [^ABC](2)[A-Z]和[a-zA-Z]小总结2 特殊字符语法(\w 这些)3 数量符4 \ 、()、 |5 锚点 ^ 和 $,\b,\B6 (?i) : 忽略其后面的大小写 ---- 这个Java是可以的,其他语言我不知道(正则表达式虽然大多通用,但也有部分是…

视频检索技术为电子商务直播领域带来了前所未有的革新

视频检测在这个场景中指的是通过视频流实时识别和检索直播中销售人员展示的商品。这涉及到从连续的视频帧中分析和识别商品的视觉内容&#xff0c;通常与语音和文本数据结合&#xff0c;以提高识别准确性。 技术原理 文本引导的注意机制&#xff1a;这一机制通过直播中销售人员…

Prometheus学习

监控架构介绍&#xff1a; 基本架构&#xff1a; Prometheus 和 Zabbix 的对比&#xff1a; 安装和使用&#xff1a; Prometheus 采集、存储数据Grafana 用于图表展示alertmanager 用于接收 Prometheus 发送的警告信息node-exporter 用于收集操作系统和硬件信息的 metrics …

猫头虎 分享:Python库 Matplotlib 的简介、安装、用法详解入门教程

&#x1f42f; 猫头虎 分享&#xff1a;Python库 Matplotlib 的简介、安装、用法详解入门教程 今天猫头虎 带大家一起探索一个非常重要的 Python 库——Matplotlib。这是一个强大的工具&#xff0c;广泛应用于数据科学、人工智能和机器学习等领域&#xff0c;用于创建静态、动…

Node.js中的pipe方法:深入解析与应用指南

在Node.js中&#xff0c;pipe方法是处理流&#xff08;Stream&#xff09;数据的一种非常高效的方式。它允许你将一个可读流&#xff08;Readable Stream&#xff09;的数据直接传输到一个可写流&#xff08;Writable Stream&#xff09;中&#xff0c;而无需手动编写读取和写入…

3、springboot时代背景

一、微服务 二、分布式 三、云原生 原生应用如何上云。 Cloud Native 上云的困难 服务自愈弹性伸缩服务隔离自动化部署灰度发布流量治理...... 上云的解决

怎样更改电脑的MAC地址?

怎样更改电脑的MAC地址&#xff1f; 电脑的机器码是可以修改的。 操作步骤&#xff1a; 1、通过按WINR键&#xff0c;调来电脑的接运行窗口&#xff0c;打开CMD命令来查看机器码。 2、命令提示符窗口里输入ipconfig /all&#xff0c;回车&#xff0c;即可显示出当前电脑的网…

wpf UniformGrid 动态加载数据

在WPF中&#xff0c;如果你想要在UniformGrid内部为每个Model对象放置一个Panel&#xff08;比如StackPanel或Grid&#xff09;&#xff0c;并且这些Panel是通过数据绑定动态生成的&#xff0c;你需要结合使用ItemsControl、DataTemplate以及UniformGrid。但是&#xff0c;由于…

调试理解 NodeJS 模块机制

前言 通过断点调试理解 NodeJS & CommonJS 的模块机制&#xff0c;先说结论&#xff1a; NodeJS 中每个文件视作一个模块&#xff0c;每个模块默认可以访问 module、exports、require、__filename、__dirname 变量NodeJS 中通过将模块源码包裹在 Wrapper 函数中&#xff…

【每日一题】【素数筛板子题】又是一年毕业季 牛客小白月赛99 D题 C++

牛客小白月赛99 D题 又是一年毕业季 题目背景 牛客小白月赛99 题目描述 样例 #1 样例输入 #1 3 4 2 4 6 5 5 6 2 5 3 2333333 8 11 4 5 14 19 19 8 10样例输出 #1 3 7 2做题思路 首先观察到 即需要保证拍照的时刻 大于等于 2 那么就从2开始往上走&#xff0c;如果有人…