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

Pandas生成匹配关键词的DataFrame新列时陷入无限处理问题

问题分析与解决方案

你的代码陷入无限处理状态,核心是以下几个问题:

原代码的问题

  • 列名拼写错误:把Sandwich Opinions误写为Sandwich iOpinions,直接导致目标列无法识别,更关键的是逻辑层面的错误。
  • 逻辑错误:在apply的lambda函数里,你遍历的是整个列的拆分结果(df['Sandwich Opinions'].str.split()),而非当前行的文本。这会让每一行都重复处理所有行的数据,加上apply本身逐行执行的特性,导致大量冗余计算,效率极低甚至看起来像无限循环。
  • 语法错误:最后一行括号不匹配,外层多余的[]和未闭合的apply调用括号,会直接导致代码无法正常解析。

正确实现方式

方法1:逐行处理(简单直观)

先将关键词转为集合提升匹配效率,再针对每行文本拆分后匹配:

import pandas as pd

data = {
    'Sandwich Opinions': ['Roast beef is overrated', 'Toasted bread is always best', 'Hot sandwiches are better than cold']
}
df = pd.DataFrame(data)

keywords = ['bread', 'bologna', 'toast', 'sandwich']
keyword_set = set(word.lower() for word in keywords)  # 统一小写,支持忽略大小写匹配

# 逐行处理当前文本,拆分后筛选匹配的关键词并拼接
df['Matches'] = df['Sandwich Opinions'].apply(
    lambda text: ' '.join([word for word in text.split() if word.lower() in keyword_set])
)

运行后输出结果:

Sandwich OpinionsMatches
Roast beef is overrated
Toasted bread is always bestbread
Hot sandwiches are better than cold

方法2:向量化处理(高效适配大数据)

使用正则表达式的向量化操作,比apply逐行处理效率更高:

import pandas as pd
import re

data = {
    'Sandwich Opinions': ['Roast beef is overrated', 'Toasted bread is always best', 'Hot sandwiches are better than cold']
}
df = pd.DataFrame(data)

keywords = ['bread', 'bologna', 'toast', 'sandwich']
# 构建匹配完整单词的正则表达式,忽略大小写
pattern = r'\b(' + '|'.join(keywords) + r')\b'

# 提取所有匹配的词并拼接成字符串
df['Matches'] = df['Sandwich Opinions'].str.findall(pattern, flags=re.IGNORECASE).str.join(' ')

如果需要匹配词根(比如sandwiches匹配sandwich),可以额外增加词形还原处理;若仅需精确匹配(忽略大小写),以上两种方法即可满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:45:18