基于pandas另一列关键词过滤DataFrame文本行的问题
解决方案
问题原因
df['text'].str.contains()要求第一个参数是单个字符串或编译后的正则模式,你直接传入df['keyword'].str会把每行的关键词列表转成字符串(比如"['a','b']"),不符合参数要求,因此触发错误。
方法一:逐行检查关键词匹配(基础版)
用apply逐行遍历DataFrame,通过any()判断对应行的text是否包含keyword列表中的任意关键词:
# 筛选保留符合条件的行 df = df[df.apply(lambda row: any(key in row['text'] for key in row['keyword']), axis=1)]
方法二:正则精准匹配(进阶版)
如果需要整词匹配(避免部分匹配,比如不想把"cat"匹配到"category"),或者关键词包含正则特殊字符(如*、?),可以用re模块处理:
import re def check_match(row): for key in row['keyword']: # \b 表示整词边界,re.escape 转义关键词中的特殊字符 if re.search(rf'\b{re.escape(key)}\b', row['text']): return True return False df = df[df.apply(check_match, axis=1)]
方法三:处理字符串形式的关键词列表
如果你的keyword列存储的是字符串格式的列表(比如"['python','pandas']"),需要先将其转换为真正的列表类型:
import ast # 把字符串转成列表 df['keyword'] = df['keyword'].apply(ast.literal_eval) # 再执行基础版的筛选逻辑 df = df[df.apply(lambda row: any(key in row['text'] for key in row['keyword']), axis=1)]
内容的提问来源于stack exchange,提问作者kaalabhairava
相关产品推荐
相关产品推荐

