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

如何在pandas DataFrame列中检索多个字符串并更新对应单元格值

错误原因

你修改后的代码不符合np.where的语法要求:
单个np.where的参数结构为np.where(判断条件, 条件为真时的返回值, 条件为假时的返回值),多条件匹配需要把下一级判断放在「条件为假时的返回值」的位置做嵌套,你直接并列传入了两组独立的三元参数,参数匹配错误才触发ValueError。


解决方案

方案1:嵌套np.where(适合条件较少的场景)

如果只有2-3个匹配规则,直接嵌套写即可,注意最新版pandas已不推荐用pd.np写法,直接调用导入的np即可:

df['cat'] = np.where(df['Vendor'].str.contains('holding'), 
                     "Yes", 
                     np.where(df['Vendor'].str.contains('tech'), 
                              "tech", 
                              ""))

方案2:np.select(适合多条件场景,可读性、可维护性更高)

如果后续还要新增匹配规则,推荐用np.select,把条件和对应返回值分开定义,修改更方便:

# 按优先级排序匹配条件,前面的条件优先级更高
conditions = [
    df['Vendor'].str.contains('holding'),
    df['Vendor'].str.contains('tech')
    # 新增条件直接在此处追加即可
]
# 每个条件对应要返回的取值,和上面的条件顺序一一对应
choices = [
    "Yes",
    "tech"
    # 新增返回值在此处对应追加即可
]
# 所有条件都不满足时返回空字符串
df['cat'] = np.select(conditions, choices, default="")

补充提示

如果匹配不需要区分大小写,可以给str.contains加case=False参数,例如df['Vendor'].str.contains('holding', case=False),会同时匹配Holding、HOLDING等大小写混合的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:36:03