【办公自动化】用Python在Excel中查找并替换数据(文末送书)

news2025/1/15 6:47:15

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


目录

一、Python处理Excel

二、用Python在Excel中查找并替换数据

三、往期推荐

 四、文末推荐与福利


一、Python处理Excel

  • Python处理Excel的好处

1.批量操作:当要处理众多Excel文件时,例如出现重复性的手工劳动,那么使用Python就可以实现批量扫描文件、自动化进行处理,利用代码代替手工重复劳动,实现自动化,是Python第一个比Excel强大的地方

2.大型文件,当Excel文件超过几十兆、甚至上百兆时,打开文件很慢、处理文件更加慢,这时候若使用Python,会发现处理几十兆、几百兆甚至几GB都是没有问题的

3.当使用Excel进行复杂的计算时,会使用VBA,但是VBA本身是过时并且复杂的语言,Python是当前最简单且容易实现的一门语言,用Python能够处理比VBA难度更高的业务逻辑

4.Python是通用语言,不仅可以处理Excel,使用Python就可以得到很多额外的功能,例如:爬虫、发布网页的Web服务、与数据库进行连接、同时结合word和PPT进行处理、加入定时任务处理、人工智能分析等,各种额外的功能,这是Excel和VBA所不具备的

  • Python处理Excel主要有三大类库

1.pandas:是Python领域非常重要的,用于数据分析和可视化的类库,在处理Excel中,90%可以利用pandas类库就可以搞掂,利用pandas就可以读取Excel、处理Excel和输出Excel,但是pandas也有缺点,就是无法做到格式类,例如Excel中合并单元、大量复杂的样式(看起来很精美)的时候,用pandas无法搞掂,此时,依然是使用pandas结合openyxl、xlwings来搞掂需求

2.openpyxl:若电脑上未安装office时,也可以使用openpyxl,这个类型可以运行在linux上,并且也可以实现操作大部分Excel格式和样式的功能,使用它配合pandas,也可以完成大部分场景的需求

3.xlwings:比openyxl更加强大,只能运行在Windows或者Mac系统,并且该系统中必须安装了office才能运行,xlwings的原理,就是基于当前系统已经安装好的office软件,来进行功能的拓展来操作Excel

  • 使用pandas的时候,经常会结合其他类库,来完成更加复杂的功能

    • requests, bs4:可以完成爬虫的功能

    • flask:可以做网页,把表格展示在网页上

    • Matplotlib:读取表格后,进行可视化

    • sklearn:进行复杂的数据分析时,也可以结合机器学习Sklearn把读取的Excel数据,进行数据分析和机器学习

    • Python-docx:也可以结合Python-docx类库,实现Excel和word的互通

    • smtplib:也可以使用smtplib,讲Excel数据发送邮件出去

  • 开发环境

操作系统:使用windows, mac都可以

Python版本:系统中需要安装Python3.6以上的版本,Python2已经过期不建议使用,Python3.6以前的版本功能相对弱,最好就是采用Python3.6以上的版本

开发工具:有两个可以选择,jupyter notebook,是个网页编辑器,可以运行Python,常常用于交互性、探索性的开发;pycharm,用于成熟脚本,或者web服务的一些开发;这两个工具可以随意选择。

二、用Python在Excel中查找并替换数据

技术工具:

Python版本:3.9

代码编辑器:jupyter notebook

        随着项目的进展,需要经常在Excel业务表格中查找及替换数据,已保证数据与实际项目进度一致。手动一个一个查找,然后替换,效率太低,还容易遗漏。现在我们来试试用Python自动完成查找及替换吧。具体要求如下。

首先,我们先将左边表格中的数据提取,并存入字典data,其键为“查找内容”中的数据,值为“替换内容”中的数据。 

from openpyxl import load_workbook #用于读取Excel中的信息
#获取Excel表格中的数据
wb = load_workbook('查找替换.xlsx')#读取工作簿
ws = wb.active #读取活动工作表
data={} #新建字典,用于储存数据

for row in range(2,ws.max_row+1):
    chazhao = str(ws['A' + str(row)].value)  #转换成字符串,以免后续比对时出现数据类型冲突
    tihuan = str(ws['B' + str(row)].value) #转换成字符串,以免后续比对时出现数据类型冲突
    data[chazhao]=tihuan #键值对应存入字典
data

         然后,读取目标表格,将D列中的所有数据提取出来,以便后续比对及替换。通过`for`循环遍历“原表”,将D列每个单元格的值提取并存入`ID_list`。然后通过切片`ID_list[:10]`查看前10个数据是否OK。结果显示相当正常。

wb = load_workbook('原表.xlsx') #读取目标工作簿
ws = wb.active
ID_list = [] #新建一个列表,用于储存原表D列的信息
for row in range(2,ws.max_row+1):
    ID = ws['D' + str(row)].value #遍历整个工作表,将D列的数据逐个存入ID变量
    ID_list.append(ID) #将读取到的结果存入列表
ID_list[:10] #查看列表中前10个数据

type("")

 

        为了比对数据,我们需要将`'说明码:77601'`中的“说明码:”字符拿掉,只保留“77601”。于是调用`split`函数来进行分割,并将分割好的数字部分存入新建的列表`code`。不好,居然报错了,说`ID_list`列表中有"None"(空)类型的数据,而"None"类型的数据是不能使用`split`函数的。目测了一下,`ID_list`列表中除了`'说明码:77601'`和`''`这样的空字符串,没看到None啊。再回来“原表”侦察一下,发现最下面还有一些单元格很有嫌疑。原来是表尾有一些“供应商”和仓位信息,这些信息所在位置对应的D列都是空单元格,其值为"None"。用`ID_list[-10:]`查看最后10个元素,果然都是"None"。 

code = [i.split(":")[-1] for i in ID_list]
code

ID_list[-10:]

        这样,我们就知道`ID_list`中有三种数据,即含内容的字符串(比如'说明码:77601'),空字符串(比如'')和空值None。因此,需要修改一下字符串分割代码如下。加入了`if`判断语句,如果`ID_list`中的值是None,则放入None占位,以保持列表的值的顺序与原表一致;值不是None,则按":"符号分割,并放分割后的最后一个值`[-1]`进入新列表code。空字符串在这里也要经过`split`分割,但其中没有“:”符号,所以就分割不了,只得直接跳过,最后放入新列表的还是空字符串。 

code = []
for i in ID_list:
    if i == None:# 如果是None,则放入None占位,以保持列表的值的顺序与原表一致
        code.append(None)
    else:
        code.append(i.split(":")[-1]) #不是None,则按":"符号分割,并放分割后的最后一个值进入新列表code
code[:10]

        处理完数据后,即可开始查找并替换目标数据了。用`for`循环遍历列表`code`,即原表D列中的数字部分。如果其中的值也存在于data的键中,即语句`if code[i] in data`,则将原表中D列(`column=4`)对应的行中的数据改写成新的值。新的值由两部分组成,一部分是“说明码:”这样的,即`ID_list[i].split(":")[0]`,另一部分则是要替换的数字,即`data[code[i]]`。这样保证只替换了需要替换的数字部分,而保留中文和冒号部分。最后保存为新的文件,替换完成。 

for i in range(len(code)):
    if code[i] in data:
        ws.cell(row=i+2,column=4).value = ID_list[i].split(":")[0] +":"+ data[code[i]]
wb.save('原表-替换.xlsx') 

        如果以上不能通过观察原表,发现空值问题,还可以用`enumerate`函数给列表里的所有元素加上索引,以便精确定位`ID_list`中的空值。加上索引后,在转换成列表,并存入新的列表`ID_list_idx`中。观察其中前10个数据,可见索引已加好了。然后遍历新列表,判断其中的值是否为空值,若是则打印其对应的索引编号,这样就能精准定位哪些是空值了,再回到原Excel表,就容易弄清楚发生了什么事啦。其中,新列表中的元素的结构是一个元组,像这样`(2, '说明码:77601')`,`i[0]`是索引`2`,`i[1]`是索引对应的值`说明码:77601`。

ID_list_idx = list(enumerate(ID_list)) #加索引
ID_list_idx[:10]

for i in ID_list_idx: #遍历列表
    if i[1] == None: #判断索引对应的值是否为空值。i的结构是一个元组,像这样(2, '说明码:77601'),i[0]是索引,i[1]是索引对应的值
        print(i[0]) #打印索引编号

 

三、往期推荐

Python提取pdf中的表格数据(附实战案例)

使用Python自动发送邮件

Python操作ppt和pdf基础

Python操作word基础

Python操作excel基础

使用Python一键提取PDF中的表格到Excel

 使用Python批量生成PPT版荣誉证书

使用Python批量处理Excel文件并转为csv文件

 四、文末推荐与福利

《码上行动:利用Python与ChatGPT高效搞定Excel数据分析》免费包邮送出3本!

内容简介:

        本书在理论方面和实践方面都讲解得浅显易懂,能够让读者快速上手,一步步学会使用Python与Excel相结合进行数据处理与分析。

        全书内容分3个部分共12章。第1~4章为入门部分,主要介绍什么是数据分析,以及Python的编程环境和基础语法知识。第5~9章为进阶部分,主要介绍数据处理和分析的各种方法。第10~12章为实战部分,这部分的3个实例综合了本书前面部分的知识点,介绍了如何结合Python与Excel在实际工作中进行数据处理与分析操作。

        本书内容由浅入深,且配有案例的素材文件和代码文件,便于读者边学边练。本书还创新性地将ChatGPT引入教学当中,给读者带来全新的学习方式。本书既适合Python和数据分析的初学者学习,也适合希望从事数据分析相关行业的读者学习,还可作为广大职业院校数据分析培训相关专业的教材参考用书。

编辑推荐:

(1)本书面向零基础读者,无须额外的背景知识即可学习Python+Excel进行数据分析。本书讲解细致,便于读者由浅入深地学习。

(2)内容系统、体系完整,可以帮助读者快速全面地了解Python的基本语法并掌握开发能力。

(3)理论与实践相结合,每个理论都有对应的代码示例,读者参考代码示例完成编写,就可以看到实践效果。

(4)本书配有实训与问答,方便读者阅读后尽快巩固知识点,做到举一反三、学以致用。

(5)将AI前沿产品ChatGPT应用到Python进行Excel数据分析学习的过程中,演示了如何利用ChatGPT提高学习和开发的效率。

  • 抽奖方式:评论区随机抽取3位小伙伴免费送出!
  • 参与方式:关注博主、点赞、收藏、评论区评论“人生苦短,拒绝内卷!”(切记要点赞+收藏,否则抽奖无效,每个人最多评论三次!
  • 活动截止时间:2023-09-20 20:00:00
  • 购买链接:https://item.jd.com/14069538.html

 名单公布时间:2023-09-20 21:00:00   

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

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

相关文章

Python 潮流周刊#20:三种基准测试的方法、为什么代码在函数中运行得更快?

△点击上方“Python猫”关注 ,回复“1”领取电子书 你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。标题取自其中两则分享,不代表全部内容都是该主题,特此声明。 本周刊由 Python猫 出品…

【Qt】Qt中关联容器QMap,QMultiMap,QHash,QMultiHash 的理解

在Qt中,有几种关联容器可供选择: QMap:QMap是一个关联容器,存储键-值对,并根据键自动进行排序。它提供了快速的查找和插入操作,适用于需要根据键进行排序和搜索的场景。 QMultiMap:QMultiMap是…

软件测评中:电子政务系统怎么测评?

1、文件依据: 1)《中华人民共和国政府采购法实施条例》(中华人民共和国国务院令 第658号) 第四十一条“大型或者复杂的政府采购项目,应当邀请国家认可的质量检测机构参加验收工作。” 2) 《国务院办公厅关于印发国家政务信息化…

深入Android系统基础知识及基本概念

深入Android系统基础知识及基本概念 Android应用程序的基本组成部分,包括Activities(活动)、Services(服务)、Broadcast receivers(广播接收器)和Content providers(内容提供者&…

Mysql---第八篇

系列文章目录 文章目录 系列文章目录一、mysql执行计划怎么看一、mysql执行计划怎么看 执行计划就是sql的执行查询的顺序,以及如何使用索引查询,返回的结果集的行数 EXPLAIN SELECT * from A where X=? and Y=? 1。id :是一个有顺序的编号,是查询的顺序号,有几个 sel…

ModbusTCP服务端

1在Device下,添加设备net: 公交车。 2在net下添加 ModbusTCP

技术人员如何提升商业敏感度?

在商业领域,最基本也是最实用的财务知识,就是看懂三张报表。简单地说,现金流量表,决定企业能不能活下来;资产负债表和利润表,决定企业活得好不好。下面分别来学习这三张报表。 资产负债表 资产负债表&#…

浅谈一下前端字符编码

背景 众所周知,计算机只能识别二进制,它是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用二进制数的0和1表示。但是现实中存在着其他的字符:数字、字母、中文、特殊符号…

如何实现Web应用、网站状态的监控?

如何实现Web应用、网站状态的监控? 关键词:网站监控,服务器监控,页面性能监控,用户体验监控本文通过代码分析、网站应用介绍网站状态监控的方式下文主要分为网站应用、技术实现两部分 一、网站应用 现在网络上已经存在一些Web网站监控的服务&#xff…

Vue ——08、路由嵌套,参数传递及重定向

路由嵌套,参数传递及重定向 一、路由嵌套二、参数传递第一种方式:第二种方式: 三、重定向————————创作不易,如觉不错,随手点赞,关注,收藏(* ̄︶ ̄),谢…

【C++杂货铺】继承由浅入深详细总结

文章目录 一、继承的概念及定义1.1 继承的概念1.2 继承定义1.2.1 定义格式1.2.2 继承方式和访问限定符1.2.3 继承基类成员访问方式的变化 二、基类和派生类对象赋值转换三、继承中的作用域四、派生类中的默认成员函数4.1 默认构造函数4.2 拷贝构造函数4.3 赋值运算符重载函数4.…

03使用Spring基于XML的方式注册第一个组件

基于XML的方式注册第一个组件 开发步骤 第一步: 创建Maven工程配置生成的pom.xml文件, 添加spring context基础依赖和junit依赖(注意根据Spring官方文档描述,Spring6需要JDK版本17) 当添加Spring的基础依赖spring context之后,Maven会自动关联并引入其他依赖spring aop, spr…

前端生态系统:构建现代Web应用的完整指南

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 前端开发生态系统是一个…

Selenium常见问题解析

1、元素定位失败: 在使用Selenium自动化测试时,最常见的问题之一是无法正确地定位元素,这可能导致后续操作失败。解决方法包括使用不同的定位方式(如xpath、CSS selector、id等),等待页面加载完全后再进行…

[NLP] LLM---<训练中文LLama2(二)>扩充LLama2词表构建中文tokenization

使用SentencePiece的除了从0开始训练大模型的土豪和大公司外,大部分应该都是使用其为当前开源的大模型扩充词表,比如为LLama扩充通用中文词表(通用中文词表,或者 垂直领域词表)。 LLaMA 原生tokenizer词表中仅包含少量…

asp.net+sqlserver医院体检信息管理系统

一、源码描述 这是一款简洁十分美观的ASP.NETsqlserver源码,界面十分美观,功能也比较全面,比较适合 作为毕业设计、课程设计、使用,感兴趣的朋友可以下载看看哦 二、功能介绍 该源码功能十分的全面,具体介绍如下&…

PyTorch深度学习实战——基于ResNet模型实现猫狗分类

PyTorch深度学习实战——基于ResNet模型实现猫狗分类 0. 前言1. ResNet 架构2. 基于预训练 ResNet 模型实现猫狗分类相关链接 0. 前言 从 VGG11 到 VGG19,不同之处仅在于网络层数,一般来说,神经网络越深,它的准确率就越高。但并非…

Linux学习第12天:基于API函数的字符设备驱动开发:一字一符总见情

本节学习的内容主要为基于LinuxAPI函数的字符设备驱动的开发,还包括在驱动模块加载的时候如何自动创建设备节点。总结的脑图如下: 一、驱动原理 1.分配和释放设备号 申请设备号函数: int alloc_chrdev_region(dev_t *dev, unsigned basemin…

改进YOLOv5小目标检测:构建多尺度骨干和特征增强模块,提升小目标检测

构建多尺度骨干和特征增强模块,提升小目标检测 背景代码使用配置文件如下🔥🔥🔥 提升小目标检测,创新提升 🔥🔥🔥 测试在小目标数据集进行提点 👉👉👉: 新设计的创新想法,包含详细的代码和说明,具备有效的创新组合 🐤🐤🐤 1. 本文包含两个创新改…

SQL优化--count优化

select count(*) from tb_user ;在之前的测试中,我们发现,如果数据量很大,在执行count操作时,是非常耗时的。 MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个 数,效率很…