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

Pandas问题:str.contains多匹配时新增列报ValueError的解决方法

解决评论特征词匹配新列的长度不匹配报错

问题背景

现有包含942条评论的reviews列,特征词列表如下:

features = ['support','time','follow','submit','ticket','team','swap','account','experi','contact','user','platform','screen','servic','custom','restrict','fast','portfolio','specialist']

需求是检查每条评论是否包含特征词中的一个或多个,并将匹配到的词存入新列。原执行代码:

data["words"] = data[data["reviews"].str.contains('|'.join(features))]

报错:ValueError: Columns must be same length as key

报错原因

原代码通过布尔索引data[data["reviews"].str.contains(...)]筛选出了匹配特征词的行子集,这个子集的行数远小于原数据集的942行,直接赋值给新列时,长度不匹配导致报错。

解决方案

使用str.findall()方法,对每一行评论提取所有匹配的特征词,返回结果的长度和原数据集完全一致,不会出现长度不匹配问题。

代码实现

import re

features = ['support','time','follow','submit','ticket','team','swap','account','experi','contact','user','platform','screen','servic','custom','restrict','fast','portfolio','specialist']

# 提取所有匹配的特征词,返回列表(无匹配则为空列表)
data["words"] = data["reviews"].str.findall(r'\b(' + '|'.join(features) + r')\b', flags=re.IGNORECASE)

# 可选:将列表转为逗号分隔的字符串格式
data["words_str"] = data["words"].apply(lambda x: ', '.join(x) if x else '')

代码说明

  1. \b单词边界:确保匹配的是独立单词(比如避免把"service"中的"servic"误匹配,若需求是匹配子串,可去掉\b)。
  2. flags=re.IGNORECASE:忽略大小写匹配,比如"Support"或"SUPPORT"都会被识别为"support",不需要可删除此参数。
  3. 处理无匹配情况:无匹配特征词的行,findall会返回空列表;若需要转为空字符串,用apply方法处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:25:35