基于字典脚本导入TXT文件 实现DataFrame列指定字符串替换的技术问询
用TXT映射文件替换DataFrame列中的特定字符串
嘿,这个需求我熟,用Pandas配合TXT映射文件就能轻松搞定,分两步走就行,我结合你的咖啡方向DataFrame示例来演示:
第一步:准备你的TXT映射文件
首先你需要把「要替换的旧字符串」和「目标新字符串」整理成一个TXT文件,比如命名为store_replacements.txt,格式建议用分隔符(逗号/制表符)分开每行的旧值和新值,这样方便读取成字典。举个符合你场景的例子:
Starbucks,星爸爸 Tullys,塔利咖啡 Seattles Best,西雅图最佳 Dunkin,唐恩都乐 Daily Dozen,每日十二
注意:如果你的新字符串里包含逗号,就换成制表符(
\t)作为分隔符,避免分割出错。
第二步:读取映射文件并批量替换
接下来用Python代码完成读取和替换操作:
1. 读取TXT文件为映射字典
先把TXT里的键值对读成Python字典,这样Pandas能直接用它来替换:
import pandas as pd # 读取映射文件到字典 store_mapping = {} with open('store_replacements.txt', 'r', encoding='utf-8') as f: for line in f: # 去掉换行符,按分隔符分割(这里用逗号,如果你用制表符就换成'\t') old_str, new_str = line.strip().split(',', 1) # split只分1次,避免新字符串里的分隔符干扰 store_mapping[old_str] = new_str
2. 替换DataFrame的Utterance列
这里分两种场景,按需选择:
场景A:替换所有出现的子串
只要Utterance里包含旧字符串就替换(比如如果有Starbucks Drive-Thru也会把Starbucks换成新值):
coffee_directions_df['Utterance'] = coffee_directions_df['Utterance'].replace(store_mapping, regex=True)
场景B:只替换完整的单词
如果只想替换独立的店名(避免部分匹配),就给映射键加上正则的单词边界\b:
# 构建带单词边界的正则映射 regex_store_mapping = {rf'\b{key}\b': value for key, value in store_mapping.items()} coffee_directions_df['Utterance'] = coffee_directions_df['Utterance'].replace(regex_store_mapping, regex=True)
替换后的效果示例
比如原来的行:
| Utterance | Frequency |
|---|---|
| Directions to Starbucks | 1045 |
| Give me directions to Tullys | 986 |
会变成(用场景B的话):
| Utterance | Frequency |
|---|---|
| Directions to 星爸爸 | 1045 |
| Give me directions to 塔利咖啡 | 986 |
额外注意事项
- 确保TXT文件的编码是
utf-8,避免中文乱码; - 如果TXT里有重复的旧字符串,后面的条目会覆盖前面的;
- 如果你的DataFrame很大,
replace()方法的效率很高,比循环每行处理快得多。
内容的提问来源于stack exchange,提问作者user_seaweed
相关产品推荐
相关产品推荐

