如何使用python快速修改Excel表单中的大量数据

python修改Excel中的内容进阶加速版

前面有一篇文章讲到了使用python处理Excel中的数据文件,即修改Excel中的数据,但是那个版本的代码跑点小规模、小数据量的excel还行,一旦数据量达到万条级别,代码运行会非常慢!因此,特意对之前的代码进行了优化,大幅的提升了代码的运行速率。

1、修改思路

首先是使用库的区别:操作Excel数据一般常用的两个库是OpenpyxlPandas

  • Openpyxl是一个用于读写Excel文件的Python库。它可以让你创建、修改和处理Excel文件,包括读取、写入、复制、剪切、替换等操作。Openpyxl可以处理xlsx、xlsm、xltx、xltm等Excel文件格式,并提供了丰富的API来进行数据操作和样式设置。
  • Pandas是一个用于数据分析数据处理的Python库。它提供了强大的数据结构和数据操作功能,特别是对于结构化数据的处理非常方便。Pandas可以读取和写入多种文件格式,包括Excel、CSV、JSON等。在数据处理方面,Pandas可以进行数据筛选、排序、聚合、合并等多种操作,并且支持处理缺失值和处理时间序列数据等常见问题。

总结来说,Openpyxl主要用于Excel文件的读写和操作,而Pandas则更适用于数据分析和数据处理。Openpyxl提供了更底层的操作,可以直接对Excel文件进行读写和样式设置,而Pandas则提供了更高层次的数据操作接口,方便处理和分析结构化数据。两者在功能和应用场景上有所区别,选择使用哪一个库取决于具体的需求和任务。

代码展示

使用openpyxl进行数据操作

import openpyxl# 打开Excel文件
workbook = openpyxl.load_workbook('变量信息.xlsx')# 选择要操作的工作表
worksheet = workbook.active# 遍历每一行
for row in worksheet.iter_rows():# 获取该行的第一个单元格的值cell_value = row[1].value# 如果该行的字符串以X开头,则将X替换为BJ1并拼接后续字符串,同时保存数据if cell_value and str(cell_value).startswith('X' or '1'):new_value = 'BJ1' + str(cell_value)[1:]row[1].value = new_valueworkbook.save('001.xlsx')print(new_value)if cell_value and str(cell_value).startswith('0'):new_value = 'BJ0' + str(cell_value)[1:]row[1].value = new_valueworkbook.save('001.xlsx')if cell_value and str(cell_value).startswith('9'):new_value = 'BJ9' + str(cell_value)[1:]row[1].value = new_valueworkbook.save('001.xlsx')# 否则遍历下一行else:continue

处理数据不会改变原先的数据格式和数据类型,但是运行速率较差

使用Pandas库进行数据修改

import pandas as pd# 读取Excel文件
df = pd.read_excel('KIC.xlsx')# 遍历每一行
for i, row in df.iterrows():# 获取该行的第一个单元格的值cell_value = row[1]# 如果该行的字符串以X或1开头,则将X或1替换为BJ1并拼接后续字符串if cell_value and str(cell_value).startswith(('X', '1')):new_value = 'BJ1' + str(cell_value)[1:]df.at[i, 'Column2'] = new_valueelif cell_value and str(cell_value).startswith('0'):new_value = 'BJ0' + str(cell_value)[1:]df.at[i, 'Column2'] = new_valueelif cell_value and str(cell_value).startswith('9'):new_value = 'BJ9' + str(cell_value)[1:]df.at[i, 'Column2'] = new_value# 将修改后的数据保存到新的Excel文件中
df.to_excel('KIC01.xlsx', index=False)

使用Pandas操作Excel数据运行速率非常快,但是会破坏Excel文件原先的文件格式

2、最终改进

要提升代码的运行速度,可以考虑以下几个方面的优化:
  1. 使用批量写入数据:在当前代码中,每次修改单元格后都会保存一次文件,这会导致频繁的磁盘操作,影响性能。可以将修改的数据先存储在一个临时的数据结构中,然后一次性写入到Excel文件中。
  2. 使用列表推导式生成器表达式替代循环:使用列表推导式或生成器表达式可以提供更高效的迭代方式,避免使用显式的循环。这样可以减少迭代次数,提升代码的执行速度。

下面是修改后的代码示例

import openpyxl# 打开Excel文件
workbook = openpyxl.load_workbook('KIC.xlsx')# 选择要操作的工作表
worksheet = workbook.active# 创建一个临时列表,用于存储修改后的数据
new_data = []# 遍历每一行
for row in worksheet.iter_rows():# 获取该行的第一个单元格的值cell_value = row[1].value# 如果该行的字符串以X开头,则将X替换为BJ1并拼接后续字符串,同时保存数据if cell_value and str(cell_value).startswith(('X', '1')):new_value = 'BJ1' + str(cell_value)[1:]elif cell_value and str(cell_value).startswith('0'):new_value = 'BJ0' + str(cell_value)[1:]elif cell_value and str(cell_value).startswith('9'):new_value = 'BJ9' + str(cell_value)[1:]else:# 如果不需要修改,则直接保存原始数据new_value = cell_value# 将修改后的数据添加到临时列表中new_data.append(new_value)# 将修改后的数据一次性写入Excel文件
for index, value in enumerate(new_data, start=1):worksheet.cell(row=index, column=2, value=value)# 保存修改后的Excel文件
workbook.save('KIC04.xlsx')

通过以上优化,代码将会更高效地执行,并提升运行速度。

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

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

相关文章

oracle 里常用的一些 create insert update table

1、获得数据库里某个指定的库 SELECT COUNT(*) FROM ALL_TABLES ut WHERE ut.OWNERTJFX AND ut.TABLE_NAME CUR_TIME_BILL; 2、创建一个表,里面的数据可以从一个已存在的表里转移过来 CREATE TABLE temptable AS SELECT * FROM old_tbName //使用现有的表创建一…

FFmpeg5.1.3编译动态库踩坑之旅(基于Linux虚拟机)

准备工作 环境准备 1.Windows安装Oracle VM VirtualBox 7.0.10,安装ubuntu-22.04.3。 坑一:无法往虚拟机里拖放复制文件,解决办法:登录Ubuntu虚拟机时切换到xorg方式登录,参考地址:Ubuntu Desktop 22.04…

【API篇】九、Flink的水位线

文章目录 1、Flink时间语义2、事件时间和窗口3、水位线4、水位线和窗口的工作原理 1、Flink时间语义 事件时间处理时间 举个例子就是,一条数据在23:59:59产生,在00:00:01被处理,前者为事件时间,后者为处理时间。 从Flink1.12版本…

阅读JDK源码的经验分享

理论先行。阅读某一个模块时,先搜索它的理论支撑,甚至可以先看别人的阅读经验,有了一个大致的了轮廓之后,自己再去实践。 必须试用。面对一个新的类,最好是先搜索一下它的基本用法,写成一个小的示例&#…

【计算机视觉】3D视觉

文章目录 一、基本问题二、三个坐标系 X w \boldsymbol{X}_w Xw​到 X c \boldsymbol{X}_c Xc​的转换 X c \boldsymbol{X}_c Xc​到 x i \boldsymbol{x}_i xi​的转换投影矩阵尺度模糊问题 三、相机标定四、立体视觉 我的《计算机视觉》系列参考UC Berkeley的CS180课程&#x…

【1.2】神经网络:神经元与激活函数

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏: 神经网络(随缘更新) ✨特色…

刷题笔记(第三天)

1.给定二进制字符串&#xff0c;将其换算成对应的十进制数字 输入&#xff1a;11000000 输出&#xff1a;192 function base10(str) {let sum 0;let a str.split().reverse(); // 个位是第一个元素for (var i 0; i < a.length; i) {suma[i]*Math.pow(2, i);}return sum;…

基于nodejs+vue食力派网上订餐系统

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

负载均衡--Haproxy

haproxy 他也是常用的负载均衡软件 nginx 支持四层转发&#xff0c;七层转发 haproxy也可以四层和七层转发 haproxy&#xff1a;法国人开发的威利塔罗在2000年基于C语言开发的一个开源软件 可以支持一万以上的并发请求 高性能的tcp和http负载均衡2.4 1.5.9 haproxy&#…

【Linux】解决缓存锁问题:无法获得锁 /var/lib/dpkg/lock-frontend

今天在运行apt-get update更新软件包后&#xff0c;突然发现安装新的软件出现了这个报错&#xff1a;正在等待缓存锁&#xff1a;无法获得锁 /var/lib/dpkg/lock-frontend。锁正由进程 1855&#xff08;unattended-upgr&#xff09;持有。如图。 这个错误通常是由于其他进程正在…

【Linux】安装与配置虚拟机及虚拟机服务器坏境配置与连接

目录 操作系统介绍 什么是操作系统 常见操作系统 UNIX操作系统 linux操作系统 mac操作系统 嵌入式操作系统 个人版本和服务器版本的区别 安装VMWare虚拟机 VMWare虚拟网卡 ​编辑 配置虚拟网络编辑器 ​编辑 安装配置Windows Server 2012 R2 安装Windows Server 2…

[动态规划] (二) LeetCode 面试题 08.01.三步问题

[动态规划] (二) LeetCode 面试题 08.01.三步问题 文章目录 [动态规划] (二) LeetCode 面试题 08.01.三步问题题意解析解题思路1.状态表示2.状态转移方程3.初始化和填表顺序4.返回值 代码实现总结 面试题 08.01. 三步问题 题意解析 (1) 小孩可以跳1-3阶台阶 (2) 结果很大&…

shell脚本实战案例---数据库的备份

目录 1.环境准备 2.数据库的分库分表备份 2.1 分库备份 2.2 分表备份 2.3 分库分表备份 通过此次shell脚本实战案例&#xff0c;我们将学习和了解到如何利用shell脚本实现数据库的分库分表备份。 1.环境准备 要实现数据库的备份&#xff0c;首先我们应该要有数据库的环境&…

python实验2 π的计算

π的计算 1. 圆周率的介绍2. BBP公式计算圆周率3. 蒙特卡洛方法计算π 1. 圆周率的介绍 圆周率π自古就是人们计算的问题&#xff0c;π到底是什么&#xff0c;圆的周长与直径的比值或者是面积与半径的平方之比&#xff0c;或者是使sinx0的最小正数x。所以每一种定义每一种理解…

Qt5.15:MinGW64位编译Oracle 19c数据库驱动及代码测试 - 安装时没有选Sources处理办法

文章目录 0 代码仓库1 环境以及条件说明2 准备一&#xff1a;下载Oracle 19c驱动&#xff0c;需要下载两个包&#xff0c;注意分x86和x642.1 32位2.2 64位2.3 新建目录并解压缩2.4 记录路径2.4.1 x86需要的路径2.4.2 x64需要的路径 3 准备二&#xff1a;下载Sources源代码的两种…

策略路由和路由策略

目录 策略路由 路由策略 策略路由和路由策略 策略路由 Step1:配置ACL&#xff0c;匹配流量 acl number 2010 rule 10 permit source 192.168.10.0 0.0.0.255 acl number 2020 rule 10 permit source 192.168.20.0 0.0.0.255 Step2:流分类traffic classifier jiaoxue //匹配…

用于静电除尘的高频高压供电电源的设计

摘要 节能减排已成为当今社会发展的主题&#xff0c;高压静电除尘器以其独特的优势广泛应用于业粉尘的回收与处理领域。随着工业的发展&#xff0c;环境问题日益突出&#xff0c;国家制定了一系列的法律、法规来限制工业排放烟气中的粉尘浓度&#xff0c;常见的除尘方法有水膜…

Navicat for MySQL 视图创建使用方法

创建视图步骤&#xff1a; 点击新建&#xff1b;选择视图&#xff1b;点击视图创建工具&#xff1b;可以在左侧拖拽表到工作区&#xff1b;选择表字段进行连线

使用koa搭建服务器(一)

最近有个需求需要使用到koa搭建服务器并编写接口对数据库进行增删改查&#xff0c;因此写一篇博客记录这段时间的收获。 一、新建koa项目 &#xff08;一&#xff09;安装koa及其相关依赖 npm i koa npm i koa-router// 中间件&#xff0c;用于匹配路由 npm i koa-bodyparse…

​Vue3响应式原理

目录 手动收集依赖通知更新 effect()&#xff1a;更改数据后执行&#xff0c;更新依赖该数据的数据&#xff08;依赖&#xff09; track&#xff08;&#xff09;收集依赖的effect()放进dep&#xff08;set去重&#xff09; 更新时触发trigger函数通知dep里所有effect()执行…