如何使用pandas匹配替换DataFrame中对应情绪的特征词汇?
实现方案
核心思路
先把两个情绪特征词表转为查找映射字典,再逐行拆分目标字段的词汇做匹配替换,比反复遍历两个特征DataFrame效率高很多。
具体实现步骤
- 第一步:构建情绪-特征词映射字典
- 第二步:定义单行文本处理函数,完成拆分、匹配、拼接操作
- 第三步:将函数应用到目标DataFrame的
moods列
完整可运行代码
import pandas as pd # 你给出的两个特征词DataFrame anger = pd.DataFrame({'anger': ['Angry','Acerbic', 'Aggressive', 'Bitter', 'Fiery', 'Outraged', 'Rebellious', 'Snide']}) happiness= pd.DataFrame({'happiness':['Happy','Cheerful','Bright', 'Celebratory', 'Effervescent', 'Gleeful', 'Humorous', 'Irreverent', 'Rambunctious', 'Raucous', 'Rollicking', 'Silly', 'Sweet', 'Whimsical', 'Witty', 'Joyous']}) # 1. 构建映射字典 mood_mapping = {} for word in anger['anger']: mood_mapping[word] = 'Anger' for word in happiness['happiness']: mood_mapping[word] = 'Happiness' # 2. 定义处理函数 def replace_mood_word(text): # 拆分词汇并去除前后空格 word_list = [w.strip() for w in text.split(',')] # 逐个匹配映射,无匹配返回None,最后拼接为字符串 replaced_list = [str(mood_mapping.get(word, None)) for word in word_list] return ', '.join(replaced_list) # 3. 构造示例目标DataFrame并处理 target_df = pd.DataFrame({ 'moods': [ 'Aggressive, Literate, Rebellious, Fun', 'Boisterous, Bright, Acerbic, Silly' ] }) target_df['moods'] = target_df['moods'].apply(replace_mood_word) # 输出结果查看 print(target_df)
可选优化
如果你的实际数据存在大小写不统一的问题,可在构建字典和匹配的时候统一转为小写,避免匹配失败:
# 构建字典时转小写 mood_mapping[word.lower()] = 'Anger' # 匹配时也转小写 mood_mapping.get(word.lower(), None)
内容的提问来源于stack exchange,提问作者PSCM
相关产品推荐
相关产品推荐

