如何用Pandas替换DataFrame每行中指定列表内的词汇?
如何替换DataFrame列中指定列表内的词汇
给定数据
词汇列表:
word = ['dog', 'cat', 'fish']
DataFrame:
import pandas as pd dfa = pd.DataFrame({'a': ['big dog', 'good food', 'dog and cat', 'little fish', 'intense light', 'nice cat']})
问题场景
尝试用以下代码替换列中出现的指定词汇,但代码未报错却无法生效:
for row in dfa['a']: for w in word: if w in row: dfa['a'] = dfa['a'].replace(w, "animal")
期望结果:
a 0 big animal 1 good food 2 animal and animal 3 little animal 4 intense light 5 nice animal
问题原因
原代码的核心问题:
- Pandas的
Series.replace()默认是完全匹配字符串,而非子串替换。只有当单元格内容和w完全一致时才会替换,而你的场景是单元格包含目标词汇,所以不生效。 - 循环遍历行的方式逻辑冗余,且没有利用Pandas的矢量化操作优势,效率低下。
正确实现方法
使用正则表达式进行子串替换,同时确保匹配完整单词(避免误替换类似doggy这类包含目标词汇的字符串):
# 构建正则模式:匹配列表中任意一个完整单词 pattern = r'\b(' + '|'.join(word) + r')\b' # 执行替换 dfa['a'] = dfa['a'].str.replace(pattern, 'animal', regex=True)
如果不需要严格匹配完整单词(比如允许替换doggy里的dog),可以去掉正则中的\b(单词边界):
pattern = '(' + '|'.join(word) + ')' dfa['a'] = dfa['a'].str.replace(pattern, 'animal', regex=True)
执行后即可得到你期望的结果。
内容的提问来源于stack exchange,提问作者Diana Mele
相关产品推荐
相关产品推荐

