如何删除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
相关产品推荐
相关产品推荐

