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

使用loc给DataFrame赋值触发ValueError,如何向keyword列插入多关键词?

问题解决:向DataFrame的"keyword"列插入多个词语

错误原因

触发的ValueError是因为pandas将set(nouns_list_c)视为一组独立的值,而你试图把这些值赋值给单个单元格,两者长度不匹配导致报错。

解决方案

方案1:将多个词语转为逗号分隔的字符串(最常用)

把集合转成字符串后赋值,单元格存储拼接后的字符串,方便后续查看和文本处理:

from konlpy.tag import Kkma
from konlpy.tag import Komoran

kkma = Kkma()
komoran = Komoran()
df['keyword'] = ''
for idx_line in range(len(df)):
    nouns_list = komoran.nouns(df['title_c'].loc[idx_line])
    nouns_list_c = [nouns for nouns in nouns_list if len(nouns) > 1] 
    if not nouns_list_c :
        continue
    # 把集合转成逗号分隔的字符串,直接赋值给单行单元格
    df.loc[idx_line, 'keyword'] = ', '.join(set(nouns_list_c))
df = df[~df['media'].isin(['코리아헤럴드', '주간경향'])]

注意:去掉了[[idx_line]]的双层列表,直接用idx_line定位单行,避免pandas误判为多行赋值。

方案2:在单元格中存储列表(保留可迭代结构)

如果需要后续对关键词进行集合/列表操作,可以直接存储列表。注意初始化列时要设为列表类型,避免类型混合:

from konlpy.tag import Kkma
from konlpy.tag import Komoran

kkma = Kkma()
komoran = Komoran()
# 初始化列为空列表
df['keyword'] = [[] for _ in range(len(df))]
for idx_line in range(len(df)):
    nouns_list = komoran.nouns(df['title_c'].loc[idx_line])
    nouns_list_c = [nouns for nouns in nouns_list if len(nouns) > 1] 
    if not nouns_list_c :
        continue
    # 集合转列表后赋值
    df.loc[idx_line, 'keyword'] = list(set(nouns_list_c))
df = df[~df['media'].isin(['코리아헤럴드', '주간경향'])]

更高效的写法:用apply代替循环

避免手动遍历行,用pandas的apply方法更简洁高效:

from konlpy.tag import Kkma
from konlpy.tag import Komoran

kkma = Kkma()
komoran = Komoran()

def extract_keywords(title):
    nouns_list = komoran.nouns(title)
    valid_nouns = [n for n in nouns_list if len(n) > 1]
    return ', '.join(set(valid_nouns)) if valid_nouns else ''

df['keyword'] = df['title_c'].apply(extract_keywords)
df = df[~df['media'].isin(['코리아헤럴드', '주간경향'])]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:35:00