Excel中批量替换字符大PK:Excel VS. Python

一、问题由来

聚会计划一些菜品,现根据实际需要把B列中一些菜品更换一些,替换成C列中的菜品,最终结果写到E列当中,如下图效果所示。

问题示意图

二、解决办法

本人经过思考,考虑到这是一个批量替换的问题,我们需要先找到更换的菜品,在原计划菜品中定位,然后更换为新菜品,手工复制粘贴极其麻烦,这时可以考虑在WPS当中使用substitutes进行批量替换。在Excel中没有stubstitutes这个函数,可以考虑使用vlookup函数。

如果是在线表格,还可以在WPS当中使用Python来解决这个问题。

1. substitutes函数

其语法是substitutes(目标数据列,原数据列,新数据列)

这是目标数据列是A2:A19,原数据列是B2:B4, 新数据列是C2:C4。

我们可以在E2中输入以下公式,回车即可:

python 复制代码
=substitutes(A2:A19,B2:B4,C2:C4)

这种解法,思路清晰,操作简单,易不易记,推荐。当然如果B2:B4和C2:C4不在当前工作表,也可以跨表引用,这样可以实现数据的跨表分离,适用于进行大量数据的替换。

这里要注意的时,替换的内容不要重复,否则就会容易适成混乱。

2. vlookup函数法

在Excel中没有substitutes,只有substitute, 所以考虑可以使用iferror+vlookup的方法来解决这个问题。

首先要明确:

  • A列:聚会计划菜单
  • B列:原菜品
  • C列:替换菜品

假设您希望在E列 中输出替换后的菜品,您可以使用以下公式:

python 复制代码
=IFERROR(VLOOKUP(A2, B:C, 2, FALSE), A2)

公式解释:

A2:聚会计划菜单中的菜品(假设从 A2 开始)。

B:C:包含原菜品和替换菜品的表格区域。

数字2表示我们要从 B 和 C 列的第二列(即"替换菜品"列)提取替换菜品。

FALSE:确保精确匹配原菜品。

IFERROR:如果没有找到对应的替换菜品,则返回原菜品(即 A2)。

E2填写完后,再选中右下角十字,双击填充即可。

3. 在线Python法

最新的wps在线文档已经支持调用Python代码,我们可以使用以下代码实现。由于在线文档已经把常用的模块导入,所以我们不必导入pandas模块,直接写代码。

python 复制代码
# 读取 Excel 数据
df = xl("$A$42:$A$59", headers=None, sheet_name="Sheet1")

replacement_dict = {}
for row in range(42, len(df)):
    original = df[row][1]  # 假设原菜品在第二列(索引为1)
    replacement = df[row][2]  # 假设替换菜品在第三列(索引为2)
    replacement_dict[original] = replacement
# 初始化起始写入位置
start_row = 42
print(replacement_dict)
for text in df[0]:  # 假设聚会计划菜单在第一列(索引为0)
    try:
        # 查找是否有对应的替换菜品
        if text in replacement_dict:
            new_text = replacement_dict[text]  # 如果有替换菜品,使用替换菜品
        else:
            new_text = text  # 否则保持原菜品
        write_xl(new_text,f"$E${start_row}",sheet_name="Sheet1")
    except Exception as e:
        # 发生错误时写入"查无此词"
        write_xl("查无此词", f"$B${start_row}", sheet_name="Sheet1")
    start_row+=1

Python的思路时,先读取表格,建立一个新旧菜名的字典,然后遍历A列,应用字典,再写入到指定列即可。

其中xl()是在wps中读取表的函数,write_xl是写入表的函数,这是与普通pandas模块不一样的。

4. 线下Python法

如果是线下python,就可以使用pandas模块来解决这个问题。通过读取you_file.xlsx文件,然后创建字典,替换后生成update_menu.xlsx。这种方法适用于数据量多的情况。如果替换的文件比较多,可以考虑把字典内容单独放,这样就变成了批量的读取字典,替换Excel文件的功能了。

python 复制代码
import pandas as pd

# 读取Excel文件中的数据
df = pd.read_excel('your_file.xlsx', sheet_name='Sheet1')

# 假设您的Excel中有3列:聚会计划菜单、原菜品、替换菜品
# df.columns = ['聚会计划菜单', '原菜品', '替换菜品']

# 创建一个字典来映射原菜品到替换菜品
replacement_dict = dict(zip(df['原菜品'], df['替换菜品']))

# 假设在聚会计划菜单中需要替换的是原菜品
def replace_dishes(menu):
    # 如果菜单中的菜品在字典中找到,则替换为对应的替换菜品
    return replacement_dict.get(menu, menu)

# 假设您的菜单数据存储在 "聚会计划菜单" 这一列
df['聚会计划菜单'] = df['聚会计划菜单'].apply(replace_dishes)

# 将更新后的DataFrame保存到新的Excel文件
df.to_excel('updated_menu.xlsx', index=False, sheet_name='UpdatedSheet')

三、学后总结

  1. 不同场景需要的不同的解决办法,不同的方法各有优劣。WPS中用substitutes, Excel中用vlookup,如果数据量较大,可以考虑用python。

  2. 在数据量较少的情况下,wps的公式甚至比py执行效率还高。但是如果是几十个文件,替换的内容成百上千时,用线下的python代码进行替换就方便了。

  3. 这是一个菜品替换小项目,如果换成翻译中的术语替换,也可以采用同样的操作,推荐使用substitutes,因为这个函数简单易于理解。

相关推荐
Null箘5 分钟前
从零创建一个 Django 项目
后端·python·django
云空8 分钟前
《解锁 Python 数据挖掘的奥秘》
开发语言·python·数据挖掘
青莳吖19 分钟前
Java通过Map实现与SQL中的group by相同的逻辑
java·开发语言·sql
Buleall26 分钟前
期末考学C
java·开发语言
重生之绝世牛码28 分钟前
Java设计模式 —— 【结构型模式】外观模式详解
java·大数据·开发语言·设计模式·设计原则·外观模式
小蜗牛慢慢爬行34 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
玖年41 分钟前
Python re模块 用法详解 学习py正则表达式看这一篇就够了 超详细
python
Algorithm157644 分钟前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
岑梓铭44 分钟前
(CentOs系统虚拟机)Standalone模式下安装部署“基于Python编写”的Spark框架
linux·python·spark·centos
m0_748255261 小时前
easyExcel导出大数据量EXCEL文件,前端实现进度条或者遮罩层
前端·excel