You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DataFrame中匹配模式时替换整个字符串而非部分内容?

解决DataFrame列包含特定子串时替换整个字符串的问题

原代码的问题在于两点:一是用^限定了仅匹配以目标子串开头的内容,而非任意位置包含子串;二是replace在正则模式下默认只替换匹配到的部分片段,而非整个单元格的字符串。以下是两种可行的解决方法:

方法一:修改正则表达式匹配整个包含子串的字符串

构造能匹配任意位置包含目标子串的整个字符串的正则规则,让replace直接替换整个单元格内容:

import pandas as pd
import re  # 若字典key包含正则特殊字符(如.、*)则需要

stimuli_dict = {'121': 'mp4', '212': 'mp3'}
# 用.*包裹key,实现"包含子串即匹配整个字符串"的效果
# 若key含正则特殊字符,用re.escape(k)转义避免正则语法冲突
stimuli_dict = {r".*{}.*".format(re.escape(k)): v for k, v in stimuli_dict.items()}

df['stimulus'] = df['stimulus'].replace(stimuli_dict, regex=True)

方法二:通过筛选赋值实现替换

遍历字典,用str.contains筛选出包含目标子串的行,直接赋值替换整个单元格内容:

import pandas as pd

stimuli_dict = {'121': 'mp4', '212': 'mp3'}

for key, val in stimuli_dict.items():
    # 筛选出stimulus列包含key的行,将对应单元格赋值为val
    df.loc[df['stimulus'].str.contains(key), 'stimulus'] = val

两种方法对比

  • 方法一:代码简洁,但需注意处理正则特殊字符,适合字典key无特殊符号的场景;
  • 方法二:逻辑直观,无需处理正则转义,适合key含特殊字符或需要明确控制替换优先级的场景(后遍历的key会覆盖先匹配的结果)。

内容的提问来源于stack exchange,提问作者stasia_l

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 11:10:35