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

如何删除pandas DataFrame某列所有行字符串中的冗余文本

问题

我希望从DataFrame的字符串中移除部分冗余文本,提取指定内容。

示例重现

当前数据

df1 = pd.DataFrame({'a': [1, 1, 2, 2, 3],
                    'b': ["NOSE PARKER Bond 1 Spain", "Fire PA1KER Bond 10 UK", 
                          "NOSE 2HANDS Bond 3 FRANCE", "EARS STARKER Bond 11 SOUTH AFRICA",
                          "NORSEPACKER Bond 01 JAPAN2002"],
                    'c': [13, 9, 12, 5, 5]})
df1

期望结果

df2 = pd.DataFrame({'a': [1, 1, 2, 2, 3],
                    'b': ["NOSE PARKER Bond 1 Spain", "Fire PA1KER Bond 10 UK", 
                          "NOSE 2HANDS Bond 3 FRANCE", "EARS STARKER Bond 11 SOUTH AFRICA",  
                          "NORSEPACKER Bond 01 JAPAN2002"],
                    'c': [13, 9, 12, 5, 5],
                    'b new': ["Bond 1", "Bond 10", "Bond 3", "Bond 11", "Bond 01"]})
df2

我的尝试

df1["b new"] = df1["b"].str.replace("[^Bond\s\d]", "").str.strip()
df1

尝试后结果不符合预期,会出现多余字符或格式混乱。

解决方案

你的正则表达式逻辑有误:[^Bond\s\d]是排除单个字符B、o、n、d、空格和数字,而非保留完整的"Bond"单词。正确做法是用提取而非替换的方式精准获取目标内容。

使用str.extract配合正确正则表达式:

df1["b new"] = df1["b"].str.extract(r'(Bond \d+)')
  • 正则r'(Bond \d+)'匹配完整的"Bond "字符串,加上后续一个或多个数字(兼容前导零的情况,比如01)
  • str.extract会提取第一个匹配到的分组内容,正好得到需要的格式

执行后即可得到和期望结果一致的b new列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:27:49