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

Python技术实现:为DataFrame列首词非BP的行添加BP前缀

Pandas:给非BP开头的字符串添加前缀BP

问题场景

需要处理DataFrame的cat列:

  • 若字符串首词不是BP,在开头插入BP
  • 首词已是BP则保持原样

输入示例:

import pandas as pd
df = pd.DataFrame({ 
   'cat': ['BP STATION', 'STATION', 'BP OLD', 'OLD OLD'],    
})

你原来的代码df['cat'] = df['cat'].str.replace(r'^\w+', 'BP')存在问题:它会把所有行的第一个单词直接替换成BP,导致OLD OLD被错误修改为BP OLD,而非预期的BP OLD OLD。

预期输出:

cat
0     BP STATION
1     BP STATION
2         BP OLD
3     BP OLD OLD

正确写法

方法1:条件判断+矢量化赋值

用str.startswith筛选出不以BP 开头的行,直接拼接前缀:

# 生成掩码:找出所有不是BP开头的行
mask = ~df['cat'].str.startswith('BP ')
# 给这些行添加BP前缀
df.loc[mask, 'cat'] = 'BP ' + df.loc[mask, 'cat']

方法2:正则负向前瞻

用正则匹配非BP开头的位置,插入前缀:

df['cat'] = df['cat'].str.replace(r'^(?!BP\s)', 'BP ', regex=True)

(?!BP\s)是负向前瞻断言,确保只在不是以BP加空格开头的位置插入BP ,不会影响原本符合要求的行。

方法3:apply lambda(简单直观)

如果数据量不大,用lambda表达式实现逻辑更清晰:

df['cat'] = df['cat'].apply(lambda s: s if s.startswith('BP ') else f'BP {s}')

效果验证

执行以上任意代码后,df['cat']都会得到符合预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:13:35