文本批量替换谁更强:Python VS. Excel公式

一、问题缘起

有人在Emeditor群里提问:有下面两张表,一张被替换表,一张参照表,想把替换表的内容根据对照表进行替换,如果对照表没有对应数据就用替换表中原有的内容。

被替换表

被替换表

对照表

经过替换后的表格如下:

替换结果

二、问题的解决

1. Excel法

题主虽然是在Excel中提问,但是给的是两个txt文件,如下图:

经过思考,可以考虑把问题转化为vlookup查询的问题。

第一步:用wps打开被替换表,然后把参照表放到sheet2中。

第二步:在替换表中新建一列,然后输入表头,在D2中应用下面的公式

=IFERROR(VLOOKUP(A2,对照表!A:B,2,FALSE),C2)

如下图所示:

就用vlookup+iferror

我把题主所谓的批量替换转化为vlookup查询,如果查询不到,即公式报错,就通过iferror显示C列的内容。填充一个单元格后,然后鼠标放到单元格的右下角,当它变成十字后双击,一键完成全部的替换。

第三步,把D列数据转化为值,然后删除C列即可。

2. Python法

由于事先没有问题主有多少条数据,后来才知道有几千万条,这时用Excel肯定是不行的,因为Excel容纳的数据量有限,故我们就可以用Python来解决这个问题。我们采用python中的pandas,把txt读取成csv文件,然后按照买家昵称合并,之后把被替换表不必替换的数据保留,最后再用pd.to_csv()保存为txt文件。代码如下:

import pandas as pd# 从文本文件读取对照表
df_mapping = pd.read_csv('对照表.txt', delimiter='\t')# 从文本文件读取被替换表
df_replace = pd.read_csv('被替换表.txt', delimiter='\t')# 使用merge进行批量替换
df_result = pd.merge(df_replace, df_mapping, on='买家昵称', how='left')# 如果对照表中没有相应数据,保留原城市信息
df_result['城市'] = df_result['城市_y'].combine_first(df_result['城市_x'])# 删除多余的列
df_result = df_result[['买家昵称', '省份', '城市']]# 将结果保存到文本文件
df_result.to_csv('output.txt', index=False, sep='\t')

三、学后反思

  1. 生活中很多问题可以通过转化的方法化繁为简,以便操作。
  2. Python解决数据量大,尤其是对txt文件非常友好。而应用Excel公式则显得更直观和简单,当然前提是数据量小。还可以用index+match来替换vlookup,大家可以试着操作一下。
  3. Excel的最大优势在于可以公式叠加、批量填充,前提是使用者必须熟悉公式。

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

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

相关文章

Modbus转Profinet网关揭秘!升级工业自动化!

Modbus转Profinet网关(XD-MDPN100/200)通过Modbus协议和Profinet协议之间的转换,实现了不同设备之间的通信。Modbus是一种常用的串行通信协议,而Profinet是一种基于以太网的工业通信协议。随着工业自动化的不断发展,Mo…

Unity 利用UGUI之Scrollbar制作进度条

在Unity中除了用Slider、Image做进度条,其实用Scrollbar也可以做进度条。 首先,在场景中新建一个Scrollbar组件和一个Text组件: 其次,创建模拟进度的一个脚本,Scrollbar_Progressbar.cs: using System.Collections; …

Linux shell jq工具操作文档(jq --help使用示例)

文章目录 jq工具介绍jq --help解读英文中文 使用示例1. 使用最简单的过滤器。将输入复制到输出,不做任何修改(除了格式化)2. 使用 -c 选项进行紧凑输出而非美化输出3. 使用 -n 选项以 null 作为单一输入值(用于创建新json&#xf…

IO进程线程 day7 进程间通信

1.使用消息队列完成两个进程之间相互通信 2.信号通信相关代码的重新实现 &#xff08;1&#xff09;signal函数的实例 #include <head.h>//定义信号处理函数 void handler(int signum) {if(signum SIGINT) //表明要处理2号信号{printf("用户按下了ctrl c键…

Linux的网络配置命令和网络设置实操

目录 一、网路命令 1.ifconfig 2.hostname 3.route 4.netstat 5.ss&#xff08;socket statistics&#xff09; 6.ping 7.nslookup 8.tcpdump 二、实操 1.单个网卡修改 2.双网卡配置 3.bond网卡绑定 一、网路命令 查看Linux基础的网络设置 网关route -nIP地址ifc…

The Sandbox 2024 Game Jam 启动|向博姆库斯博士证明你的游戏开发实力!

The Sandbox Game Jam 是面向所有游戏制作爱好者的创作比赛&#xff01;我们诚邀您加入 The Sandbox 的生态系统&#xff0c;这里充满活力&#xff0c;游戏与文化相融&#xff0c;创作者彼此切磋&#xff0c;共同实现梦想。唯一能限制您的只有想象力。The Sandbox 游戏由大家共…

MySQL之导入、导出

文章目录 1.navicat导入导出2.mysqldump命令导入导出2.1导出2.2导入 3.load data infile命令导入导出4.远程备份5.思维导图 1.navicat导入导出 使用Navicat工具导入t_log 共耗时 55s 2.mysqldump命令导入导出 2.1导出 导出表数据和表结构 语法&#xff1a; mysqldump -u用…

JVM的FastThrow优化机制

前言&#xff1a; 前一阵子&#xff0c;在公司排查线上问题发现&#xff1a;出问题的方法报空指针异常&#xff0c;但是没有异常堆栈信息和Message。我一开始以为是代码中做了处理&#xff0c;但是经过翻阅代码发现不是。最后一番查找资料&#xff0c;这种现象是JVM的一种优化机…

windows rtmp发送数据流程抓包

一、connect 返回Window Acknowledgement Size&#xff1a; 返回Set Peer Bandwidth 二、 releaseStream 三、 FCPublish 四、 createStream 五、 _checkbw 六、 FCPublish返回 七、createStream 八、 _checkbw返回 九、发送关键帧 十、发送视频帧 十一、FCUnpublish 十二、del…

【小白专用】C#关于角色权限系统

&#xff08;C#&#xff09;用户、角色、权限 https://www.cnblogs.com/huangwen/articles/638050.html 权限管理系统——数据库的设计&#xff08;一&#xff09; https://www.cnblogs.com/cmsdn/p/3371576.html 权限管理系统——菜单模块的实现&#xff08;二&#xff09; …

RabbitMQ发布确认

1.单个确认 单个确认发布是一种同步确认发布方式&#xff0c;也就是发布一个消息后只有它被确认发布&#xff0c;后续的消息才能继续发布。 缺点:发布速度特别慢,因为若是没有确认发布的消息会阻塞所有后续消息的发布 package com.hong.rabbitmq5;import com.hong.utils.Rabb…

C# 反射的乌云,MethodInfo的Json序列化参数入参问题

文章目录 前言直接运行MethodInfo运行结果 Json解决ParamterInfo实例化运行结果无法实例化问题部分参数的问题 Json反序列化 经过长达一天的研究&#xff0c;我终于完全的解决的了实战思路方法测试用例运行测试运行结果 代码总结总结 前言 我上篇文章已经基本解决了反射的基本…