使用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
相关产品推荐
相关产品推荐

