批量查找替换咨询:能否通过替换表实现医院名称标准化修正?
嘿,手动反复做查找替换确实太折磨人了,尤其是数据量一大,不仅费时间还容易漏改或者改错。针对你要修正15家医院名称的需求,我给你几个不同工具场景下的高效解决方案,你可以根据自己平时用的工具来选:
方案1:Excel/Google Sheets 自定义函数(一劳永逸)
如果你的数据在Excel或Google Sheets里,最省心的方式是做一个名称映射表+自定义函数,以后要更新规则直接改映射表就行:
步骤:
- 先在工作表里建一个映射表(比如单独开个Sheet),A列放需要匹配的关键词(比如
Princesa、La Paz),B列放对应的正确全称(Hospital La Princesa、Hospital La Paz),把15家医院都列进去。 - 用自定义函数批量替换:
- Excel:按
Alt+F11打开VBA编辑器,插入一个模块,粘贴下面的代码:
回到Excel,在主表的空白列输入Function FixHospital(inputName As String) As String ' 创建映射字典 Dim nameDict As Object Set nameDict = CreateObject("Scripting.Dictionary") ' 从映射表加载规则(假设映射表在Sheet2,A2:B16是15家医院的规则) Dim i As Integer For i = 2 To 16 nameDict(Sheet2.Cells(i, 1).Value) = Sheet2.Cells(i, 2).Value Next i ' 遍历匹配关键词,找到就替换 Dim key As Variant For Each key In nameDict.Keys If InStr(1, inputName, key, vbTextCompare) > 0 Then FixHospital = nameDict(key) Exit Function ' 找到匹配就返回,避免多关键词冲突 End If Next key ' 没匹配到就返回原内容 FixHospital = inputName End Function=FixHospital(B2)(假设B列是原医院名称),下拉填充就能得到修正后的名称,之后可以把公式结果转成值替换原列。 - Google Sheets:点击「扩展程序→Apps Script」,粘贴下面的代码:
保存后回到表格,输入function FIXHOSPITAL(inputName) { // 从映射表获取规则(假设映射表在Sheet2,A2:B16) const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2"); const mapData = sheet.getRange("A2:B16").getValues(); const nameMap = new Map(mapData); // 遍历匹配 for (const [key, value] of nameMap) { if (inputName.includes(key)) { return value; } } return inputName; }=FIXHOSPITAL(B2)即可批量替换。
- Excel:按
方案2:Python 批量处理(适合超大量数据/数据库)
如果你的数据存在CSV、Excel或者数据库里,用Python的pandas库可以快速批量处理,代码写一次以后直接改映射规则就行:
import pandas as pd # 读取数据(如果是数据库可以用sqlalchemy连接,这里以CSV为例) df = pd.read_csv("患者主表.csv") # 定义医院名称映射字典,把15家都加进去 hospital_map = { "Princesa": "Hospital La Princesa", "La Paz": "Hospital La Paz", # 示例:"San Carlos": "Hospital San Carlos", # 继续添加其他医院... } # 自定义替换函数 def replace_hospital_name(name): for key, correct_name in hospital_map.items(): if key in str(name): # 处理空值情况 return correct_name return name # 应用替换到医院列 df["医院名称"] = df["医院名称"].apply(replace_hospital_name) # 保存修正后的数据(如果是数据库就用df.to_sql写入) df.to_csv("修正后患者主表.csv", index=False)
这个方法适合几万甚至几十万行的大数据,运行一次就能搞定,而且映射规则可以随时在字典里修改扩展。
方案3:Power Query(Excel可视化操作,不用写代码)
如果你不想碰代码,Excel的Power Query工具也能搞定,适合可视化操作:
- 把主表数据导入Power Query:点击「数据→从表格/区域」,确认数据有表头后加载。
- 加载映射表:同样把你做好的关键词-正确名称映射表导入Power Query,选择「仅创建连接」。
- 合并查询:在主表的Power Query编辑器里,点击「合并查询→合并查询作为新查询」,选择映射表,连接类型选「左外部」,然后在合并条件里,主表选医院名称列,映射表选关键词列,点击「高级选项」,匹配类型选「包含」,确定。
- 替换名称:展开合并后的列,只选择正确名称列,然后添加自定义列,输入
=if [正确名称] <> null then [正确名称] else [原医院名称列],删除原列和多余的列。 - 加载回Excel:点击「关闭并上载」,就能得到修正后的表格。
小提示:
- 注意映射规则的优先级,如果有医院名称包含多个关键词(比如
La Paz Norte和La Paz),要把更具体的关键词放在映射表的前面,避免被笼统的关键词先匹配。 - 测试的时候先拿一小部分数据验证替换结果,没问题再批量处理。
内容的提问来源于stack exchange,提问作者Nicolas Riera
相关产品推荐
相关产品推荐

