【办公自动化】用Python在Excel中查找并替换数据(文末送书)
🤵♂️ 个人主页:@艾派森的个人主页
✍🏻作者简介: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
相关文章:

【办公自动化】用Python在Excel中查找并替换数据(文末送书)
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...

python学习随笔3
range的使用 range()在python很常用,可以进行初始化和遍历等。 # range(st,ed) # [st, ed)# range(st,ed,step) # range(st, ed, step) i,i step, i 2 * step ... () < ed切片 跟range类似。 ll[st:ed:step]容器 元组 python中的元组中内容不可以进行更…...
《TCP/IP网络编程》阅读笔记--epoll的使用
1--epoll的优点 select()的缺点: ① 调用 select() 函数后针对所有文件描述符的循环语句; ② 调用 select() 函数时需要向操作系统传递监视对象信息; epoll()的优点: ① 无需编写以监视状态变化为目的的针对所有文件描述符的循环语…...
Python 递归函数
视频版教程 Python3零基础7天入门实战视频教程 在一个函数体内调用它自身,被称为函数递归。函数递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。 实例,求123…100的和,用递归实现。数学…...
Java实现计算两个日期之间的工作日天数
需求: 需要在后端实现 计算当前日期与数据库内保存的日期数据之间相隔的工作日数目 实现 import java.time.DayOfWeek; import java.time.LocalDateTime;public class WorkdaysCalculator {public static void main(String[] args) {String givenDateTimeStr &q…...

CS5817规格书|CS5817芯片参数|多功能便携式显示器方案芯片规格
CS5817支持最高4K 60Hz是集睿致远(ASL) 新推出的多功能显示控制器芯片,CS5817产品可应用于便携显示器、电竞显示器、桌面显示器、一体式台式机和嵌入式显示系统。 Type-C/DP/HDMI2.0输入转LVDS/eDP/VBO 芯片, 高度集成了多种输入输出接口, 并…...

2023面试知识点一
1、新生代和老年代的比例 默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ),即:新生代 ( Young ) 1/3 的堆空间大小。老年代 ( Old ) 2/3 的堆空间大小。其中,新生代 ( …...
【算法题】2856. 删除数对后的最小数组长度
题目: 给你一个下标从 0 开始的 非递减 整数数组 nums 。 你可以执行以下操作任意次: 选择 两个 下标 i 和 j ,满足 i < j 且 nums[i] < nums[j] 。 将 nums 中下标在 i 和 j 处的元素删除。剩余元素按照原来的顺序组成新的数组&…...

Java面向对象编程
在关系型是数据库中,有两个不同的事务同时操作数据库中同一表的同一行,不会引起冲突的是: A. 其中一个DELETE操作,一个是SELECT操作 B. 其中两个都是UPDATE C. 其中一个是SELECT,一个是UPDATE D. 其中一个SELECT E. 其…...

K8S:Yaml文件详解及编写示例
文章目录 一.Yaml文件详解1.Yaml文件格式2.YAML 语法格式 二.Yaml文件编写及相关概念1.查看 api 资源版本标签2.yaml编写案例(1)相关标签介绍(2)Deployment类型编写nginx服务(3)k8s集群中的port介绍&#x…...

去耦电路设计应用指南(一)MCU去耦设计介绍
(一)MCU去耦设计介绍 1. 概述2. MCU需要去耦的原因2.1 去耦电路简介2.2 电源噪声产生的原因2.3 插入损耗2.4 去耦电路简介 参考资料来自网上: 1. 概述 我们经常看到单片机或者IC电路管脚常常会放置一个或者多个陶瓷电容,他们主要…...
【c++】杂记
文章目录 预处理器constauto 预处理器 预处理器:运行于编译过程之前的一段程序 预处理变量:不属于命名空间std,由预处理器负责管理 const const对象一旦创建就不再改变 const对象必须初始化 const对象旨在文件内有效 ectern const int bufsizefun() /…...
简记:使用 Django Shell 清空 数据库表
简记 使用 Django Shell 清空所有数据库表 jcLee95的博客:https://blog.csdn.net/qq_28550263 本文地址:https://blog.csdn.net/qq_28550263/article/details/132862795 目 录 1. 描述2. 步骤备份重要数据进入 Django Shell输入脚本 1. 描述 由于历史的…...
Web项目测试
http: //localhost: 8080 /shop1/ 协议 服务器的地址 端口号 相应的代码文件或文件夹 127.0.0.1 (服务器所在的端口) Web项目测试:系统测试 Web项目测试要做什么类型:接口测试、功能测试、性能测试、兼容性测试、安全测试、界面测试、易…...
Springboot 集成 Ehcache 提示 Cannot find cache named ‘employee_all‘ for Builder
异常提示: java.lang.IllegalArgumentException: Cannot find cache named employee_all for Builder[public java.lang.Iterable org.bc.device.service.EmployeeService.findAll()] caches[employee_all] | key | keyGeneratorkeyGenerator | cacheManager | cac…...
pandas 笔记:shift
用于将数据系列或数据框中的数据按指定的位置移动。这对于某些时间序列分析特别有用,例如计算数据的变化量或滞后值 1 对Series/DataFrame数据进行移动 1.0 原始数据 import pandas as pd import numpy as np df1pd.DataFrame(np.arange(12).reshape(3,4),column…...

解密(2023寒假每日一题 20)
给定一个正整数 k k k ,有 k k k 次询问,每次给定三个正整数 n i , e i , d i n_i,e_i,d_i ni,ei,di ,求两个正整数 p i , q i p_i,q_i pi,qi ,使 n i p i q i , e i d i ( p i − 1 ) ( q i − 1 …...

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

手撕排序之堆排序
一、概念: 什么是逻辑结构、物理结构? 逻辑结构:是我们自己想象出来的,就像内存中不存在一个真正的树 物理结构(存储结构):实际上在内存中存储的形式。 堆的逻辑结构是一颗完全二叉树 堆的物理结构是一个数组 之…...

【奇想星球】重磅!我们的AIGC共创社区平台上线了!
文章目录 01 前言功能模块 02 相识缘起连接价值平台优势 03 奇想星球04 我们做了什么时间线 05 初心愿景06 可爱的小伙伴们后续开发及招募计划 07 结语 公众号原文链接 01 前言 2023年9月10日,我们的平台网站上线了! 奇想星球 | AIGC共创社区平台。网站地…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

[论文阅读]TrustRAG: Enhancing Robustness and Trustworthiness in RAG
TrustRAG: Enhancing Robustness and Trustworthiness in RAG [2501.00879] TrustRAG: Enhancing Robustness and Trustworthiness in Retrieval-Augmented Generation 代码:HuichiZhou/TrustRAG: Code for "TrustRAG: Enhancing Robustness and Trustworthin…...