python按列索引提取文件夹内所有excel指定列汇总(示例代码)

下面我会详细讲解“python按列索引提取文件夹内所有excel指定列汇总”的完整实例教程。在教程中,我会使用Python语言和一些第三方库来实现这个功能。

一、需求分析

首先,我们需要明确我们的需求:从一个文件夹内的所有Excel文件中,提取出指定列的数据,并将其汇总到一个新的文件中。具体来说,我们可以定义如下需求:

  • 文件夹路径:我们需要指定需要处理的Excel文件所在的文件夹路径,可以是相对路径或者绝对路径;
  • 列索引:我们需要指定需要提取的指定列的列索引,可以是列的数字索引或者A、B、C这样的字母索引;
  • 表头:我们需要指定Excel文件中用作表头的行数,以便于在数据汇总时排除表头中的内容;
  • 汇总数据到新Excel文件:我们需要将所有提取到的数据汇总到一个新的Excel文件中,这个文件需要放在指定的位置上。

二、技术实现

接下来,我们可以考虑如何使用Python语言来实现这个功能。

1. 获取文件夹内的所有Excel文件

我们可以使用Python的osglob模块来获取指定文件夹内的所有Excel文件。具体实现代码如下:

import os
import glob

def get_excel_files(folder_path):
    """
    获取指定文件夹内的所有Excel文件
    """
    os.chdir(folder_path)
    excel_files = glob.glob("*.xlsx") + glob.glob("*.xls")
    return excel_files

在上面的代码中,我们使用了os.chdir()函数来切换文件夹路径,可以确保后续操作是在指定的文件夹内进行的。然后,我们使用glob.glob()函数来获取所有的Excel文件,其中*.xlsx*.xls表示通配符,匹配所有后缀名为.xlsx和.xls的文件。最后,我们将所有的Excel文件名称存储到一个列表中,作为后续操作的输入。

2. 读取Excel文件并提取指定列的数据

我们可以使用Python的pandasopenpyxl这两个库来读取Excel文件,并提取指定列的数据。具体实现代码如下:

import pandas as pd
from openpyxl import load_workbook

def get_column_data(file_name, sheet_name, column_index, header_row):
    """
    从Excel文件中提取指定列的数据
    """
    # 读取Excel文件
    wb = load_workbook(filename=file_name)
    ws = wb[sheet_name]

    # 读取数据
    df = pd.DataFrame(ws.values)
    header = df.iloc[header_row-1]
    data = df.iloc[header_row:]

    # 提取指定列的数据
    column_data = data.iloc[:, column_index-1]

    return column_data

在上面的代码中,我们使用了openpyxl.load_workbook()函数来加载Excel文件,并使用pandas.DataFrame函数将其转换为一个数据框。然后,我们使用iloc函数来提取数据框中的指定列数据,并将其返回。

3. 将所有Excel文件的指定列数据汇总到一个数据框中

接下来,我们需要将所有Excel文件的指定列数据汇总到一个数据框中,以便于后续的数据处理。具体实现代码如下:

def merge_data_columns(folder_path, sheet_name, column_index, header_row):
    """
    将所有Excel文件的指定列数据汇总到一个数据框中
    """
    # 获取所有的Excel文件
    excel_files = get_excel_files(folder_path)

    # 读取指定列的数据
    column_data_list = []
    for file_name in excel_files:
        column_data = get_column_data(file_name, sheet_name, column_index, header_row)
        column_data_list.append(column_data)
    all_data = pd.concat(column_data_list, ignore_index=True)

    return all_data

在上面的代码中,我们首先使用get_excel_files()函数获取指定文件夹内的所有Excel文件,然后循环遍历所有的Excel文件,使用get_column_data()函数提取指定列的数据,并将所有的数据拼接到一个数据框中,最后将数据框返回。

4. 将汇总的数据保存到新的Excel文件中

最后,我们可以使用pandas库将汇总的数据保存到一个新的Excel文件中。具体实现代码如下:

def save_to_file(data_frame, file_name, sheet_name):
    """
    将数据保存到Excel文件中
    """
    writer = pd.ExcelWriter(file_name, engine="openpyxl")

    sheet_exists = False
    try:
        # 尝试打开已经存在的工作表
        writer.book = load_workbook(file_name)
        writer.sheets = {ws.title:ws for ws in writer.book.worksheets}
        sheet_exists = True
    except:
        # 如果不存在,则创建一个新工作表
        pass

    if sheet_exists:
        # 如果工作表已经存在,则在现有工作表上追加数据
        data_frame.to_excel(writer, sheet_name, index=False, header=False, startrow=writer.sheets[sheet_name].max_row)
    else:
        # 如果工作表不存在,则新建一个工作表
        data_frame.to_excel(writer, sheet_name, index=False)

    writer.save()

在上面的代码中,我们使用pandas.ExcelWriter()函数创建一个Excel写入器,然后使用openpyxl.load_workbook()函数打开已存在的工作表,或使用pandas.DataFrame.to_excel()函数在新的工作表上写入数据。

三、示例说明

最后,我可以给出两个示例来介绍如何使用上面的实现代码。假设我们有如下的Excel文件夹:

D:\
└─Excel Files
    └─SampleData
        ├─Jan.xlsx
        ├─Feb.xlsx
        └─Mar.xlsx

每个Excel文件包含如下数据:

A B C D E
1 ID Name Age City Dept
2 001 Bob 31 LDN HR
3 002 John 28 NYC IT
4 003 Kate 30 LDN IT
5 004 Tom 35 NYC Sales
6 005 Lucy 40 NYC HR
7 006 Gary 42 LDN HR

示例一:提取每个Excel文件的第三列数据,汇总到一个新的Excel文件中

# 读取所有的Excel文件,并将第三列数据汇总到一个数据框中
folder_path = r"D:\Excel Files\SampleData"
header_row = 1
sheet_name = "Sheet1"
column_index = 3
all_data = merge_data_columns(folder_path, sheet_name, column_index, header_row)

# 将汇总的数据保存到一个新的Excel文件中
file_name = r"D:\Excel Files\Summary.xlsx"
save_to_file(all_data, file_name, sheet_name)

在上面的代码中,我们首先设置文件夹路径、表头、工作表名称和需要提取的列索引等参数,然后使用merge_data_columns()函数读取Excel文件并提取指定列数据,最后使用save_to_file()函数将汇总的数据保存到一个新的Excel文件中。

示例二:提取每个Excel文件的第二列、第四列数据,汇总到一个新的Excel文件中

# 读取所有的Excel文件,并将第二列和第四列数据汇总到一个数据框中
folder_path = r"D:\Excel Files\SampleData"
header_row = 1
sheet_name = "Sheet1"
column_index_list = [2, 4]
column_data_list = []
for i in column_index_list:
    column_data = merge_data_columns(folder_path, sheet_name, i, header_row)
    column_data_list.append(column_data)
all_data = pd.concat(column_data_list, axis=1)

# 将汇总的数据保存到一个新的Excel文件中
file_name = r"D:\Excel Files\Summary.xlsx"
save_to_file(all_data, file_name, sheet_name)

在上面的代码中,我们首先设置文件夹路径、表头、工作表名称和需要提取的列索引列表等参数。然后,我们循环遍历每个需要提取的列,使用merge_data_columns()函数读取Excel文件并提取指定列数据,并将所有的列数据合并到一个数据框中。最后,我们使用save_to_file()函数将汇总的数据保存到一个新的Excel文件中。

四、总结

通过上面的实例教程,我们学习了如何使用Python语言和一些第三方库来实现按列索引提取文件夹内所有Excel指定列汇总的功能。此外,我们还学习了如何使用函数和循环等技巧,能够提高代码的可重用性和可读性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python按列索引提取文件夹内所有excel指定列汇总(示例代码) - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • python自动发微信监控报警

    下面是关于“Python自动发微信监控报警”的完整攻略: 背景概述 在现代互联网运维中,实时监控是相当重要的一环。当遇到异常情况时,及时发出报警可以避免服务中断,减少故障带来的损失。同时,大数据处理和人工智能的发展,使得自动化程度越来越高,因此实现自动监控是很有必要的。 本文将介绍使用Python实现自动监控并实现微信报警的完整流程。 具体步骤 1. 准备工…

    python 2023年5月19日
    00
  • Python入门教程(二十四)Python的迭代器

    Python入门教程(二十四)Python的迭代器 什么是迭代器? 在Python中,迭代器是一种抽象的数据类型,它可以让你遍历容器中的元素,但是不需要知道容器中元素的数量以及具体的存储方式。 迭代器是Python访问容器的方式之一,它可以用于遍历任何可以遍历的对象。迭代器的工作方式是在迭代过程中不断返回容器中的下一个元素,直到容器中的所有元素都遍历完毕。 …

    python 2023年6月5日
    00
  • python list排序的两种方法及实例讲解

    以下是详细讲解“Python列表排序的两种方法及实例讲解”的完整攻略。 在Python中,列表是一种常用的数据类型,可以用来存储一组有序的数据。本文将介绍Python中列表的两种方法,并提供两个示例说明。 方法一:使用sort()方法 sort()方法用于对列表进行排序,可以按照升序或降序排列。例如: lst = [3, 1, 4, 2] lst.sort(…

    python 2023年5月13日
    00
  • Python实现的简单文件传输服务器和客户端

    下面是关于“Python实现的简单文件传输服务器和客户端”的完整攻略,包含以下几个部分: 一、实现思路: 创建一个TCP服务器,用于接收客户端的请求。 客户端连接服务器,进行文件上传或下载操作。 服务器接收到客户端的请求后,根据请求类型进行文件的上传或下载。 客户端将需要上传或下载的文件发送给服务器,服务器接收后存储到指定位置。 客户端从服务器下载文件时,服…

    python 2023年6月5日
    00
  • 详解Python3的TFTP文件传输

    下面是详解Python3的TFTP文件传输的完整攻略。 什么是TFTP文件传输 TFTP(Trivial File Transfer Protocol)是一种简单的文件传输协议,它广泛用于网络中,特别是在无盘设备(例如路由器、交换机等)和网络启动环境中。TFTP数据传输使用UDP协议来建立数据报文和传递数据包,而不是TCP协议,因此传输速度相对更慢,但更简单…

    python 2023年6月3日
    00
  • Python判断字符串是否为字母或者数字(浮点数)的多种方法

    以下是“Python判断字符串是否为字母或者数字(浮点数)的多种方法”的完整攻略: 一、问题描述 在Python中,我们经常需要判断一个字符串是否为字母或数字(包括浮点数)。本文将介绍多种方法来判断一个字符串是否为字母或数字。 二、解决方案 2.1 使用isalpha()方法判断字符串是否为字母 isalpha()方法用于判断一个字符串是否只包含字母。如果字…

    python 2023年5月14日
    00
  • Python中list列表的赋值方法及遇到问题处理

    在Python中,列表是一种常用的数据类型,可以存储多个元素。本文将详细讲解Python中list列表的赋值方法及遇到问题处理,包括浅拷贝和深拷贝区别、如何避免浅拷贝带来的问题以及如何使用()函数进行深拷贝。并提供两个实例说明。 浅拷贝和深拷贝的区别 在Python中,赋值操作会创建新的对象,并将其引用赋值给变量。对于列表来说,赋值操作会创建一个新的列表对象…

    python 2023年5月13日
    00
  • python 中不同包 类 方法 之间的调用详解

    下面我将来一步步详细讲解“python 中不同包 类 方法 之间的调用”的攻略。 1. 包的导入 要使用不同包之间的类或方法,首先需要导入相应的包。在Python中,可以使用import命令来导入包。一个包就是一个由模块和其它子包组成的文件夹。 1.1. 导入同级目录下的包 当要导入同级目录下的包时,可以使用以下语句: import 包名 例如,有一个名为t…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部