如何用Python高效筛选含另一数据集公司名的新闻标题?
高效匹配新闻标题与公司名的方法
方法一:用Pandas的str.contains结合正则表达式
这是最适合初学者的高效方案,步骤简单:
- 先把所有公司名拼接成正则匹配模式,用
|分隔,这样能一次匹配多个关键词 - 用Pandas的向量化字符串方法筛选符合条件的标题
示例代码:
import pandas as pd # 假设你的公司数据存在df_companies里,列名叫'company_name' # 新闻数据存在df_news里,列名叫'news_title' # 生成正则模式:转义公司名里的特殊字符(比如.、*),再用|连接 company_pattern = '|'.join(df_companies['company_name'].str.replace(r'([\.\*\?\+\(\)\[\]\{\}\|\\])', r'\\\1')) # 筛选包含任一公司名的新闻,不区分大小写,跳过空值标题 matched_news = df_news[df_news['news_title'].str.contains(company_pattern, case=False, na=False)]
case=False:避免因为大小写差异漏掉匹配结果na=False:自动忽略空标题,防止报错
方法二:用fuzzywuzzy处理近似匹配(可选)
如果标题里的公司名有简称、错别字这类情况,可以用这个库做模糊匹配,容错性更强:
- 先安装依赖:
pip install fuzzywuzzy python-Levenshtein - 示例代码:
from fuzzywuzzy import process def check_company_match(title, company_list, threshold=80): # 找标题里和公司名最匹配的结果,匹配度超过阈值就算符合 best_match = process.extractOne(title, company_list, scorer=process.fuzz.partial_ratio) return best_match[1] >= threshold # 应用函数筛选新闻 matched_news = df_news[df_news['news_title'].apply(lambda x: check_company_match(x, df_companies['company_name'].tolist()))]
partial_ratio:适合标题只包含公司名部分内容的场景threshold:可自行调整,数值越高匹配越严格
为什么比for循环快?
Pandas的向量化操作是底层用C实现的,避开了Python循环的性能瓶颈,数据量越大,效率提升越明显。
内容的提问来源于stack exchange,提问作者asmallbagofchips _
相关产品推荐
相关产品推荐

