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

Pandas中按列替换包含指定子串的整串值问题

解决方案

原代码问题分析

你写的代码错误在于str.replace的第一个参数传入了DataFrame切片,而str.replace要求第一个参数是字符串/正则模式,而非Series对象,因此无法生效。

可行方案

方案1:布尔索引筛选赋值

先通过正则匹配筛选出符合条件的行,再直接赋值为ball:

import pandas as pd

# 构造示例数据
data = {
    'val1': ['blue_ball', 'white ball', 'racket', 'red ball', 'Golf ba+ll', 'bow', 'chess', 'ball blue'],
    'val2': [4, 1, 9, 2, 1, 7, 3, 3]
}
df = pd.DataFrame(data)

# 生成匹配掩码:按顺序包含b、a、l、l(中间可穿插任意字符,忽略大小写)
mask = df['val1'].str.contains(r'b.*?a.*?l.*?l', case=False, na=False)
# 对匹配到的行赋值
df.loc[mask, 'val1'] = 'ball'

print(df)

方案2:正则直接替换

用正则匹配整个符合条件的字符串,直接替换为ball:

df['val1'] = df['val1'].str.replace(r'.*b.*?a.*?l.*?l.*', 'ball', case=False, regex=True)

正则说明

  • r'b.*?a.*?l.*?l':按顺序匹配b→a→l→l四个字符,.*?是非贪婪匹配任意字符(支持空格、下划线、+等特殊符号)
  • case=False:忽略大小写,确保Ball、BA+LL这类变体也能被匹配
  • na=False:避免空值导致的匹配错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:10:25