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

Pandas提取含括号子串时报错:传递项数与预期不符的解决问询

带括号字符串的正则匹配报错解决方法

场景还原

先看正常运行的示例:

import pandas as pd

df1 = pd.DataFrame({'Item': ["Bag room","Bag Scan", "Bag Screening Equipment"],'CC': ["AAA","BBB", "CCC"]})
df2 = pd.DataFrame({'Item': ["SIN_SATS LTD_DOC-Bag Scan :Aug","SIN_SATS LTD_DOC-Bag room :Aug","EDI_EDINBURGH AIRPORT LTD_DOC-Bag Screening Equipment :Sep"]})

# 这段代码可以正常提取匹配项并映射CC列
pat = '|'.join(df1['Item'].values)
df2['Item_Description'] = df2['Item'].str.extract(f"({pat})")
df2['CC'] = df2['Item_Description'].map(df1.set_index('Item')['CC'])

但当df1的Item改为带括号的内容(比如"Bag Screening (Equipment)"),df2的对应字段也更新后,运行相同代码会抛出错误:Wrong number of items passed 2, placement implies 1。

报错原因

括号在正则表达式中是分组标记,属于特殊语法字符。直接把带括号的字符串拼进正则模式时,括号会被解析为分组,导致str.extract匹配时返回多个分组结果,但我们只指定了一个列来接收,因此触发报错。

解决方案:转义正则特殊字符

不需要手动移除括号,只需要用re.escape()把每个Item字符串中的正则特殊字符转义成字面量字符,再拼接正则模式即可:

import pandas as pd
import re

# 修改后的带括号的DataFrame
df1 = pd.DataFrame({'Item': ["Bag room","Bag Scan", "Bag Screening (Equipment)"],'CC': ["AAA","BBB", "CCC"]})
df2 = pd.DataFrame({'Item': ["SIN_SATS LTD_DOC-Bag Scan :Aug","SIN_SATS LTD_DOC-Bag room :Aug","EDI_EDINBURGH AIRPORT LTD_DOC-Bag Screening (Equipment) :Sep"]})

# 对每个Item做正则转义,再拼接成匹配模式
pat = '|'.join(re.escape(item) for item in df1['Item'].values)
df2['Item_Description'] = df2['Item'].str.extract(f"({pat})")
df2['CC'] = df2['Item_Description'].map(df1.set_index('Item')['CC'])

re.escape()会自动处理所有正则特殊字符(包括括号、*、+、.等),让它们被当作普通文本匹配,彻底避免特殊语法引发的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:45:32