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

Python pandas如何删除Name列中对应Model子串后的多余文本内容

问题原因
  • 列名大小写不匹配:你代码中使用的name、model为小写,而实际DataFrame的列名为首字母大写的Name、Model,pandas区分列名大小写,这是第一个问题。
  • partition参数逻辑错误:df["Model"].to_string()会将整个Model列转换为包含索引、换行符的完整长字符串,并不是每行对应使用该行的Model值作为分隔符,所以每行的Name列内容根本找不到这个全局长分隔符,自然不会有任何修改效果。
实现方案

方案1:逐行处理(适合小数据量,逻辑直观)

通过apply遍历每一行,找到当前行Model值在Name中的结束位置,直接截取前缀即可:

import pandas as pd

# 构造测试数据
df = pd.DataFrame([['ABC-12(s)', 'Some text ABC-12(s) wrong text'], ['ABC-45', 'Other text ABC-45 garbage text'], ['XYZ-LL', 'Another text XYZ-LL unneeded text']], columns = ['Model', 'Name'])

# 逐行截取到Model值结束的位置
df['Name'] = df.apply(lambda row: row['Name'][:row['Name'].find(row['Model']) + len(row['Model'])], axis=1)

方案2:向量化正则匹配(适合大数据量,性能更高)

将所有Model值转义后拼接为正则捕获组,直接提取Name中从开头到匹配到对应Model值的部分:

import pandas as pd
import re

# 构造测试数据
df = pd.DataFrame([['ABC-12(s)', 'Some text ABC-12(s) wrong text'], ['ABC-45', 'Other text ABC-45 garbage text'], ['XYZ-LL', 'Another text XYZ-LL unneeded text']], columns = ['Model', 'Name'])

# 构造匹配所有Model值的正则,先做转义避免Model中的特殊字符(如括号)影响正则匹配
model_reg = '(' + '|'.join(df['Model'].apply(re.escape)) + ')'
# 提取从开头到匹配到Model值的所有内容
df['Name'] = df['Name'].str.extract(rf'(.*?{model_reg})', expand=False)

两种方案处理后都可以得到预期结果:

indexModelName
0ABC-12(s)Some text ABC-12(s)
1ABC-45Other text ABC-45
2XYZ-LLAnother text XYZ-LL

内容的提问来源于stack exchange,提问作者Lauris Kārkliņš

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 06:48:04