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

如何在Pandas DataFrame列中存储列表并实现高兴趣关键词筛选

解决Pandas存储列表列的报错及关键词匹配需求实现

先解决"setting an array element with a sequence"报错

你之前直接用df['Column_Name'] = []或df['Column_Name'] = list()初始化列的方式有问题——Pandas默认会把列当成同类型的标量数组,空列表会被识别为长度为0的序列,和DataFrame的行数不匹配,后续追加内容时就会触发类型冲突报错。

正确的初始化空列表列的方式是:

import pandas as pd

# 初始化每个元素都是空列表的列
df_main['Matched_Keywords'] = pd.Series([[] for _ in range(len(df_main))])
df_main['Keyword_Sources'] = ""  # 字符串列直接初始化为空字符串即可

完整实现关键词匹配需求

下面是针对你的两个DataFrame,实现所需功能的完整代码:

1. 准备测试数据(可替换成你的真实数据)

# 主数据
df_main = pd.DataFrame({
    'Sentence': [
        "我喜欢Python和数据分析",
        "Java开发效率高",
        "没匹配关键词的句子",
        "Python和Java都很流行"
    ]
})

# 关键词数据
df_key = pd.DataFrame({
    '关键词': ['Python', '数据分析', 'Java', 'C++'],
    'Interest level': [5.0, 4.0, 5.0, 3.0],
    'Source': ['编程', '数据领域', '编程', '后端']
})

2. 定义匹配处理函数

def match_keywords(sentence):
    # 筛选出句子中包含的关键词行
    matched_rows = df_key[df_key['关键词'].apply(lambda x: x in sentence)]
    
    if len(matched_rows) == 0:
        return [], ""
    
    # 找到最高兴趣度
    max_interest = matched_rows['Interest level'].max()
    # 筛选出兴趣度最高的所有关键词
    top_matches = matched_rows[matched_rows['Interest level'] == max_interest]
    
    # 返回关键词列表和去重后的来源字符串(用逗号分隔)
    return top_matches['关键词'].tolist(), ', '.join(top_matches['Source'].unique())

3. 应用函数到主数据

# 对每个句子应用匹配函数,拆分结果到新列
df_main[['Matched_Keywords', 'Keyword_Sources']] = df_main['Sentence'].apply(
    lambda x: pd.Series(match_keywords(x))
)

最终效果

运行后df_main会新增两列:

  • Matched_Keywords:每行是符合条件的关键词列表(无匹配则为空列表,多个最高兴趣度关键词则全部保留)
  • Keyword_Sources:对应关键词的来源字符串(去重后用逗号分隔)

注意事项

  • 如果你的关键词匹配需要更精准(比如全词匹配、正则匹配),可以修改match_keywords函数里的匹配逻辑,比如用re.search(r'\b' + re.escape(x) + r'\b', sentence)实现全词匹配
  • 若数据量很大,循环或apply效率较低,可以考虑用向量化操作优化匹配速度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:33:02