Python Pandas:如何提取DataFrame文本中匹配的指定词汇到新列
解决方法:提取匹配的指定词汇而非布尔值
嘿,刚学Python完全不用不好意思~你的问题其实是循环逻辑的小问题:每次循环都用单个单词的匹配结果覆盖了整个df['words']列,最后自然只剩最后一个单词的布尔判断结果,而不是所有匹配到的词汇。下面给你几种实用的解决方案:
1. 用apply结合列表推导(直观易懂,适合小数据集)
这个方法会逐行检查文本,收集所有匹配的目标词汇:
import pandas as pd list_words = ['apple','banana','orange'] # 对每行text,筛选出存在的词汇,返回列表 df['words'] = df['text'].apply(lambda x: [word for word in list_words if pd.notna(x) and word in x])
- 效果:如果某行文本同时包含
apple和banana,df['words']对应的值就是['apple', 'banana'];没有匹配的话返回空列表[]。
2. 用矢量化的str.findall(高效,适合大数据集)
Pandas的字符串方法是矢量化的,比apply快很多,推荐处理大量数据时用:
import pandas as pd import re list_words = ['apple','banana','orange'] # 转成正则备选模式,用re.escape避免词汇含特殊字符时出错 pattern = '|'.join(re.escape(word) for word in list_words) # 提取所有匹配的词汇,返回列表 df['words'] = df['text'].str.findall(pattern) # 如果需要忽略大小写匹配,加flags参数: # df['words'] = df['text'].str.findall(pattern, flags=re.IGNORECASE)
可选:把匹配列表转成逗号分隔的字符串
如果不想存列表,想要用字符串展示匹配结果,可以再加一步:
df['words_str'] = df['words'].apply(lambda x: ', '.join(x) if x else '')
比如匹配到两个词汇时,会显示apple, banana,无匹配则显示空字符串。
内容的提问来源于stack exchange,提问作者krasnapolsky
相关产品推荐
相关产品推荐

