如何用pandas的str.replace方法批量替换DataFrame指定列的值?
Pandas批量替换DataFrame指定列值
原数据
column1 column2 aaaa cup bbbb coffee cccc juice dddd tea
期望结果
column1 column2 aaaa pink bbbb brown cccc orange dddd white
问题与尝试
多次单独调用str.replace可实现需求,但代码繁琐:
df['column2'] = df['column2'].str.replace('cup', 'pink') df['column2'] = df['column2'].str.replace('coffee', 'brown') df['column2'] = df['column2'].str.replace('juice', 'orange') df['column2'] = df['column2'].str.replace('tea', 'white')
尝试用字典批量替换但失败:
change_word = { 'cup':'pink' ,'coffee':'brown', 'juice':'orange','tea':'white' } df['column2'].str.replace(change_word, inplace=True)
解答
str.replace不支持直接传入字典做批量替换:该方法第一个参数仅接受字符串或正则表达式,第二个参数接受字符串或替换函数,直接传字典不符合参数要求,因此无法生效。可行解决方案:通过正则表达式结合lambda函数实现批量替换,既支持部分匹配,也可按需设置精确匹配:
import re change_word = { 'cup':'pink', 'coffee':'brown', 'juice':'orange', 'tea':'white' } # 生成匹配所有待替换关键词的正则(自动转义特殊字符) pattern = re.compile('|'.join(re.escape(key) for key in change_word.keys())) # 用lambda函数根据匹配到的关键词返回对应替换值 df['column2'] = df['column2'].str.replace(pattern, lambda match: change_word[match.group()])
- 如果需要精确匹配整个单词(比如避免把'cupcake'中的'cup'误替换),可以给正则加上单词边界
\b:
pattern = re.compile(r'\b(' + '|'.join(re.escape(key) for key in change_word.keys()) + r')\b')
该方法既简化了代码,又保留了str.replace支持部分匹配的特性,完全符合需求。
内容的提问来源于stack exchange,提问作者now
相关产品推荐
相关产品推荐

