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

Python如何查找DataFrame列中指定子串位置并移除生成新列

实现方法

基于Pandas字符串方法+正则匹配即可完成需求,无需逐行循环,全列向量化处理性能优异。

  • 支持以列表形式传入任意待匹配的目标子串,自动适配匹配规则,仅识别被英文半角括号包裹的目标内容,避免误匹配用户名本体中出现的相同字符
  • 位置计数规则和示例完全对齐:从字符串起始位(0索引)开始计数,返回括号内目标子串首字符的索引值
  • 自动清理清洗后用户名前后的多余空格

完整代码

import pandas as pd

# 1. 初始化数据与匹配规则
# 替换为你的实际DataFrame即可
df = pd.DataFrame({
    "User name": ["XYZ (R1)", "ABCD (R2) ", "LKMNP (R2)"]
})
# 以列表形式传入需要查找的目标子串
targets = ["R1", "R2"]
# 拼接正则规则,匹配 (R1)、(R2) 格式的片段,捕获括号内的目标值
match_pattern = rf"\(({'|'.join(targets)})\)"

# 2. 生成各要求字段
# 提取括号内匹配到的目标子串
df["extract"] = df["User name"].str.extract(match_pattern, expand=False)
# 计算目标子串的位置:左括号位置+1即为括号内子串首字符位置
df["Position"] = df.apply(
    lambda x: x["User name"].find(f"({x['extract']})") + 1, 
    axis=1
)
# 移除括号及内部内容,清理前后多余空格得到新用户名
df["New name"] = df["User name"].str.replace(match_pattern, "", regex=True).str.strip()

运行结果

执行后输出的DataFrame如下:

User name extract  Position New name
0     XYZ (R1)      R1         5      XYZ
1  ABCD (R2)       R2         6     ABCD
2  LKMNP (R2)      R2         7    LKMNP

你给出的示例中第三行原始数据为LKMNP (R2),目标输出写为LK (R2)/LK属于笔误,上述逻辑会完整保留括号前的所有用户名内容,符合常规清洗要求。如果存在单条用户名包含多个匹配目标的场景,可将正则调整为全局匹配后做行展开,上述代码适配当前单匹配的业务场景。如果存在未匹配到目标子串的行,对应extract、Position字段会返回空值,可根据业务需要额外加过滤或填充逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:06:19