python遍历sheet并将处理结果存储到当前工作表中

Python:多表格处理 【代码】Python:多表格处理。 阅读详情

1、背景

刚开始的时候,领导给了我一张excel表,她说每周都不定期更新,每次更新都是复制粘贴,不但容易出错,而且要花费2个多小时,然后她问我,你在下班时间可以考虑怎么用脚本如python,或VBA把这个东西做批量化处理,提高一下工作效率,我说好,然后就开始构思怎么去处理这样一种格式的数据,捡起我3个月都没写脚本的热情,就展开了。刚开始也没想着一下就能完全实现,一步一步来,快一点是一点,然后写了一个不太完美的初级版本,后面在别人的刺激下对脚本进行了改善,完全做到了自动化脚本,目前已经正常无误运转了3次,打算再测4次,后面就正式投入使用了,哈哈!!!!

2、需求实现

大致的需求如下图,就是如何把原始的数据格式变成目标格式(实际上就是把区域1,2,3根据字段名做一个纵向连接),大家可以先思考一下如何去做,下面一一为大家揭晓:
原始数据:
在这里插入图片描述
目标样式:
在这里插入图片描述
相信有很多小伙伴们都能想到,就是先把每一个汇报人所属区域的起始位置和区域间隔识别出来,然后结合for用concat做个纵向拼接,不就ok了么,能想到这一步,那就离成功不远了,哈哈,下面将逐步分析怎么去是实现这个功能,即如何实现这个功能呢????。

3、分析及代码实现

(1)废话不多说,先把文件读进来再说;
在这里插入图片描述
(2)获取区域的起始位置:大家有没有发现,1,2,3(第一行合并单元格的数据)在excel中的数据表现和python不一致,excel占据了多个单元格,python只占用了一个单元格。从python输出来看,第一行中不为nan的数据是不是就是每一个区域的开始位置对应的值,那么是不是可以使用argwhere函数来获取它所对应的索引,也就是位置呢,下面继续,这里注意不加astype将其转化成float类型会报错,因为isnan只适用于float类型;
在这里插入图片描述
(3)得到区域间隔:区域间隔,不就是后项减去前项吗,这么简单的操作,构造一个新列就行,哈哈;确定了每个区域的起始位置和间隔,用个循环是不是就搞定了呢???
在这里插入图片描述
(4)for循环遍历区域:这里有几个注意的小点,说明一下:
1、from numpy import * 是为了使用tile函数,方便对第一列进行填充;
2、注意iloc每次取数的位置
3、为什么要使用dropna函数???这个读者可以自己去探索,去掉和不去掉有什么区别
4、concat的时候记得吧df重置索引,也就是用reset_index函数,
在这里插入图片描述
(5)如果是普通需求,将empty_df的数据直接用to_csv、to_excel、to_sql写入就行,是不是就ok了,哈哈,大功告成!!!

附加想法

(1)如果要遍历所有sheet,怎么弄??

file_path = "D:\\test.xlsx"  # 获取文件路径
    
file = pd.ExcelFile(file_path)
sh_names = file.sheet_names  # 获取sheet名称
    
# 写个循环遍历所有sheet
for sh_name in sh_names:
    raw_data = pd.read_excel(file_path, sheet_name = sh_name, header = None)

(2)如何将数据写入到原始的工作表中,并且不覆盖原来的数据,怎么操作(在实际工作中其实是有这种需求的,即原始表给我留着,过程表我也要,结果表我也要,统一放在一个工作簿中)??反正直接使用to_excel是行不通的,往下看,不加engine='openpyxl’参数就会覆盖原表,不知道为啥,有兴趣的可以去探索一下:

# 将数据写入到excel文件中,过程表,在写入的时候不覆盖原表
writer = pd.ExcelWriter(file_path,engine='openpyxl')  # 方便存储原表
book = load_workbook(file_path)
writer.book = book
empty_df.to_excel(excel_writer = writer, sheet_name = '过程表')
writer.save()
writer.close()

源代码


# -*- coding: utf-8 -*-
"""
遍历整个excel工作簿,对所有sheet的每个区域进行同样操作,实际上就是并到一块,做自动化处理
This is a temporary script file.
"""

import pandas as pd
from numpy import *
import numpy as np
from openpyxl import load_workbook

'''遍历sheet,对不同区域数据进行拼接'''
def deal_data(file_path, sh_name, empty_df):
    
    raw_data = pd.read_excel(file_path, sheet_name = sh_name, header = None)
    No1_row = np.array(raw_data.iloc[0, :]).astype(float) # 获取第一行的数据,方便按照区域进行划分,不加astype会报错,isnan只适用于float类型
    
    # 得到起始位置
    No1_index = np.ravel(np.argwhere(~np.isnan(No1_row)))  # 获取第一行的索引,方便进行区域划分
    # 求出间隔
    col_num = raw_data.shape[1]
    No1_index_mk = np.append(No1_index[1:], col_num) # 构造列,实现错位相减
    interval = No1_index_mk - No1_index  # 每次取数的间隔,也就是步长
    
    user_col_names= ['序号']
    
    # 将每个区域的数据拼接
    length = len(No1_index)
    for i in range(0, length):
    
        begin_position = No1_index[i]
        begin_interval = interval[i]
        # 获取每一块区域的数据
        part_data = raw_data.iloc[:, begin_position:begin_position + begin_interval]
        data = part_data.dropna(how="all")  # 去重掉该区域的空值
      
        # 获取列名
        input_col_names = np.array(data.iloc[1, 0:begin_interval])
        # 获取实际信息
        input_info = data.iloc[2:, :].reset_index(drop=True)
        input_info.columns = input_col_names
        row_num = len(input_info)  # 获取行数,方便进行填充      
        # 获取序号信息并填充
        user_info = np.array(data.iloc[0:1, 0])   # 获取投放用户信息
        user_info_fill = pd.DataFrame(tile(user_info,(row_num,1)), columns = user_col_names).reset_index(drop=True)
        
        # 横向拼接
        data_1 = pd.concat([user_info_fill, input_info], axis = 1)
       
        # 纵向拼接
        empty_df = pd.concat([empty_df, data_1], axis = 0, sort = False)
        
    return empty_df
    

if __name__ == '__main__':
    
    file_path = "D:\\test.xlsx"  # 获取文件路径
    
    file = pd.ExcelFile(file_path)
    sh_names = file.sheet_names  # 获取sheet名称
    empty_df = pd.DataFrame()  # 创建一个空df,用来存储数据
    
    # 将多个sheet中的数据整合到一个sheet中
    for sh_name in sh_names:
        empty_df = deal_data(file_path, sh_name, empty_df)
    
    
    # 将数据写入到excel文件中,过程表,在写入的时候不覆盖原表
    writer = pd.ExcelWriter(file_path,engine='openpyxl')  # 方便存储原表
    book = load_workbook(file_path)
    writer.book = book
    empty_df.to_excel(excel_writer = writer, sheet_name = '过程表')
    writer.save()
    writer.close()

Python-pandas计算Excel每个工作簿的工作表中值的总和与平均值,连同原信息一起写入多个sheet 文件路径如下: ExcelPython.py是当前运行文件,红框内三个文件是原始数据文件,每个文件内有三个sheet,含日期类型。如下: 我们要计算每个工作簿的工作表中值的总和与平均值,写入原文件(这里先复制出一份和原来一样的文件后写入新文件) 知识点如下:pandas的函数、读取多个工作簿下的多个工作表、同时向一个Excel文件内写入多个sheet,一次写入多个Excel文件 源码如下:含主要部分注释: #计算每个工作簿的工作表中值的总和与平均值,写入原文件(这里先复制出一份和原来一样的文件后写入新文件 阅读详情

相关推荐

Python xlwings操作Excel(摸鱼划水必备技能)——(2)python xlwings与VBA间的互相调用

3)需要先勾选RunPythonUseUDFServer,左边的interpreter需要填入Python.exe的路径,PYTHONPATH填入所调用python脚本文件的路径(不包括文档名)如D\Python\code,UDFModules填入文档名,如Test.py注意为.py后缀文件。(1)首先需要知道xlwings包的安装位置,不知道的话可以通过查看xlwings任意函数的__code__获取函数的所在路径来找到安装位置。(5)在VBA中添加引用,勾选xlwings。......

m0_59160272的博客 3454

【python】【pandas】如何遍历Excel工作簿workbook的所有工作表worksheet并生成一个合并表:

读取的结果将返回一个字典,其中键是工作表的名称,值是对应的DataFrame。你可以根据需要进行修改,以适应特定的Excel文件和数据合并要求。参数,我们将忽略原始数据的索引,以确保合并的DataFrame具有连续的索引。最后,我们打印合并的DataFrame,它将包含所有工作表的数据。要遍历Excel工作簿中的所有工作表并生成一个合并表,你可以使用。# 创建一个空的DataFrame用于存储合并的数据。函数用于读取Excel文件中的每个工作表,然后使用。循环遍历字典中的每个工作表数据,并使用。

Good_Hope的博客 3859

python 合并Excel中已有的N个sheet,并且把合并后的数据保存为新的sheet

python 合并Excel中已有的N个sheet,并且把合并后的数据保存为新的sheet 之前想把一个工作簿中结构相同的多个sheet进行合并,由于sheet太多,不可能手动完成,又不会VBA编程,所以就谢了一个实现此功能的python程序。希望对有相同需求的兄弟姐妹有帮助。 用到的Python模块如下: xlrd pandas openpyxl xlrd、pandas、op...

iseeyounow2017的博客 2万+

将遍历结果集得到的结果以java对象的形式全部保存起来

package DAY02; /**  * 若一个类的每一个实例专门用来存储一系列数据  * 而没有任何业务罗技方法,  * 那么该类的每一个实例都是值对象:VO ValueObject  * 若当前类的每一个实例表示的是是数据库中某张表的一条记录时,那么该类  * 也称为:实体类  * @author Ward  *  */ public class UserInfo {     privat...

Ward_Tian的博客 2292

Python高效合并Excel多Sheet工作表,告别繁琐手动操作

Python高效合并Excel多Sheet工作表,告别繁琐手动操作

weixin_47139678的博客 1367

用Python将多个Excel的sheet分别合并到一个Excel的不同sheet

我们在进行数据处理时,有时需要将多个Excel的相同sheet合并到一起,这时我们可以用Python轻松实现!

m0_67606722的博客 3395

python读取多个excel表_python 实现读取一个excel多个sheet表并合并的方法

python 实现读取一个excel多个sheet表并合并的方法如下所示:import xlrdimport pandas as pdfrom pandas import DataFrameDATA_DIR = 'E:/'excel_name = '%s2017.xls' % DATA_DIRwb = xlrd.open_workbook(excel_name)# print(wb)# 获取wor...

weixin_39849894的博客 9632

python 多个excel合并到一个sheet中

-- coding:utf-8 -- 多个excel合并成一个sheet import xlrd, xlsxwriter 待合并excel allxls = [“C:\Users\zhudong\Desktop\azkaban自动爬取\2018-09-01.xlsx”, “C:\Users\zhudong\Desktop\azkaban自动爬取\2018-09...

qq_22994783的博客 2257

实现Excel里每个sheet的排序并整合在一个sheet里

针对一个excel文件中多个sheet的批处理,excel的选定全部工作表功能可以解决很多问题(如:转置、替换等),但是对于排序确难以实现。因此在这里使用python工具来实现批量排序。 最终目的是实现对每个sheet文件排序后,将所有sheet拼接在一个sheet中。 最初打算先批量排序,然后在实现拼接。 但是在运行批量排序的代码中发现sheet发生覆盖,虽然网上有避免覆盖的方法,...

UCAS_Leon的博客 2654

python踩坑 Pandas.to_excel(),使不同数据一次写入同一张Excel表中的不同Sheet表单

文章目录前言使不同数据一次写入同一张Excel表中的不同Sheet表单原始写法:解决办法(如何保存结果到已存在的Excel文件中):早睡早起,时间变多了,sincerely,end. 前言   运行python,想在一个Excel表中的不同sheet表单中按需添加不同数据,经过遍历之前总是只有一个表单(即遍历的最后一个),已解决,如有错误,请纠正,万分感谢! 使不同数据一次写入同一张Excel表中的不同Sheet表单 目的:想在同一张Excel表中,根据movie_id建立sheet表单。    即

lavender_dream的博客 4692

Python-Pandas进行批量Excel文件、多Sheet表合并

本文汇总日常工作中对批量Excel数据的合并方法,主要使用Python-Pandas库相关方法。具体包括多个excel表格合并到一个excel、多个excel表格合并到一个excel中的不同sheet与一个excel表格中的多个sheet合并到至一个。

FGH333xwy的博客 4908

利用Python把EXCEL表格的sheet拆成不同文件,并以sheet名称命名

【代码】利用Python把EXCEL表格的sheet拆成不同文件,并以sheet名称命名。

weixin_44259522的博客 941

Python Pandas多Sheet数据导出:Excel与CSV高效存储方案详解

在数据处理与数据分析工作中,数据导出是连接Python计算环境与业务协作的关键环节。其核心原理在于将内存中的结构化数据(如Pandas DataFrame)序列化为持久化文件格式,以实现数据的共享、存档与可视化。这项技术的核心价值在于打通了编程语言的数据处理能力与办公软件(如Excel)的通用性,极大地提升了数据工作流的自动化程度与可复用性。从应用场景看,无论是生成包含销售、用户、订单等多维度数据的业务报表,还是整理分门别类的实验数据,都需要将不同数据集清晰、有序地组织起来。针对这一需求,**多工作表(Sh

weixin_34268843的博客 349

2.4g和5g要不要合并_Excel&Python合并处理Excel工作簿、工作表

Ps:文末有百度云数据提取方式及Python源码一、合并处理工作簿所用数据截图1、Python 合并处理工作簿import pandas as pd import os """ 目标:合并多张表格,每个表中仅有一个sheet """ # 定义表格所在路径 path = r"E:知乎01 Excel_Python合并excel工作簿和工作表datatables" os.chdir(path) ...

weixin_31591011的博客 347

chatgpt赋能python:Python自动读取包含某些名称的sheet

pandas是一个功能强大的数据分析和处理工具,特别适合处理表格数据。它具有快速、灵活、简单易用的特点,在数据分析、数据清洗、特征工程等领域得到了广泛应用。pandas库可以读取、写入、处理不同格式的数据,比如Excel、CSV、SQL等,使得数据的读取和处理更加高效和方便。在Excel文件中,我们可以通过包含某些名称的工作表来存储相同类型的数据,比如某个客户的订单信息、某个产品的销售记录等等。如果我们需要针对这些工作表分别进行处理,手动查找并打开每个工作表会极大地浪费时间。

www_xuhss_com的博客 300

4种方法用Python批量实现多Excel多Sheet合并

在数据处理中,经常需要将多个Excel文件中的多个工作表进行合并。以下介绍了4种方法,使用Python批量实现多Excel多Sheet的合并。

这家伙很懒,什么都没有留下 1万+

Python 合并多个Excel工作簿或工作表

Spire.XLS for Python 可以将同一文件夹或者不同文件路径下的多个Excel文件合并到一个Excel文件中。合并Excel可以将多个文件中的数据合并到一个文件中,这样可以帮助我们更好地汇总和管理数据。将多个文件中的工作表合并到一个工作表中首先是需要获取工作表中的包含数据的单元格区域,然后将该单元格区域通过。然后遍历列表中的文件并将它们都载入到一个临时的工作簿中。将多个Excel工作表合并为一个工作表。将多个Excel工作表合并为一个工作表。将多个Excel文件合并为一个文件。

Eiceblue的专栏 1535

GCC调试黑科技:-fomit-frame-pointer优化下如何保证栈回溯能力

本文深入探讨了GCC编译器在启用`-fomit-frame-pointer`优化选项时如何保证栈回溯能力。通过分析`.eh_frame`段的结构与DWARF调试信息,提供了从编译选项配置到实战调试的完整解决方案,帮助开发者在性能优化与调试能力之间找到最佳平衡点。

u6v7w8x的博客 907

python中的sheet_python实现读取excel文件中所有sheet操作示例

本文实例讲述了python实现读取excel文件中所有sheet操作。分享给大家供大家参考,具体如下:表格是这样的实现把此文件所有sheet中 标识为1 的行,取出来,存入一个字典。所有行组成一个列表。# -*- coding: utf-8 -*-from openpyxl import load_workbookdef get_data_from_excel(excel_di...

weixin_39989688的博客 1718

C# OpenCV机器视觉:红外体温检测

阿强长舒一口气,脸上露出了自信的笑容:“好了,万事俱备,只欠东风,接下来就看我的了!在这热图像里,不同的颜色代表着不同的温度区域,就好比一幅用温度绘制的抽象画,红色通常表示高温,蓝色则代表低温,通过解读这幅画,就能大致了解物体表面的温度分布情况。” 阿强兴奋得一拍大腿,“这不就像是找到了隐藏在黑暗中的线索,只要顺着这些红外线的踪迹,就能揪出体温异常的潜在风险,守护大家的健康啦。带着这份坚定的信念,阿强又投入到新的科技研发中,他相信,只要大家齐心协力,用科技点亮希望之光,就一定能迎来更加美好的明天。

xcwzj123的专栏 3152

什么是Claude 的 Agent Skills?

摘要: Claude的Agent Skills功能支持通过结构化技能包(含指令、脚本、工具)实现任务自动化,如数据分析、文档生成等。核心能力包括:1)技能包管理(如Python脚本+模板);2)工具调用(API/数据库交互);3)子代理协作(拆分复杂任务)。快速上手步骤:创建技能包(如Excel报表生成)、配置工具权限、触发执行;支持多代理并行处理(如SQL查询+可视化)。关键技巧:工具需明确定义参数、利用子代理共享上下文、注重权限管控。官方文档与社区资源提供进阶指导,使Claude成为可编程的数字助手。

jobleap.cn求职助手首页 1731
上一篇: python遍历文件夹中带指定后缀的文件并做数据拼接
下一篇: 常用广告计价方式
python_new
博客等级 码龄9年 50粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值