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

发布时间:2024年01月06日

一、问题缘起

有人在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的最大优势在于可以公式叠加、批量填充,前提是使用者必须熟悉公式。
文章来源:https://blog.csdn.net/henanlion/article/details/135428238
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。