正则匹配XLS产品名称时存入数组的是Lambda函数对象该如何解决
问题修复方案
错误原因
你当前代码中products.append(lambda x : labeler(x))是将匿名函数对象本身添加到了数组中,既没有执行函数逻辑,也没有传入遍历得到的产品名称参数,因此打印结果全是函数内存地址。
修复方法
方案1:直接调用匹配函数(最推荐,易读性高)
直接将遍历到的产品名称传入labeler函数执行,把返回的匹配结果加入数组即可:
products = [] for x in df['Product Name']: products.append(labeler(x)) print(products)
方案2:Pandas向量化写法(适合数据量较大的场景)
不需要手动写循环,直接调用apply方法批量处理,性能更高:
products = df['Product Name'].apply(labeler).tolist()
可选优化:返回匹配字符串而非匹配对象
当前labeler函数返回的是re.Match匹配对象或者None,如果你需要直接拿到匹配到的字符串,可以修改函数逻辑:
def labeler(product): recognized_pattern = re.search(r"abc\w+(\s)?\w+(.|\s)?\w+", product, re.IGNORECASE) # 匹配成功返回对应字符串,匹配失败返回None return recognized_pattern.group() if recognized_pattern else None
内容的提问来源于stack exchange,提问作者Malte
相关产品推荐
相关产品推荐

