如何在DataFrame中匹配NRCLex情感列表并填充0/1值?
解决方法
方法1:手动构建情感标记Series
先明确所有目标情感列的列表,创建初始值全为0的Series,再将分析得到的情感对应位置设为1,最后合并到原DataFrame中。
示例代码:
import pandas as pd # 原DataFrame假设为df,定义目标情感列 emotion_cols = ['Fear', 'Happy', 'Angry', 'Excited'] # 初始化全0的情感标记 emotion_flags = pd.Series([0]*len(emotion_cols), index=emotion_cols) # 将存在的情感设为1 for emotion in text_emotion: if emotion in emotion_flags.index: emotion_flags[emotion] = 1 # 转成DataFrame并合并到原表(单条数据场景) emotion_df = pd.DataFrame([emotion_flags.values], columns=emotion_cols) df = pd.concat([df, emotion_df], axis=1)
方法2:补全get_dummies生成的缺失列
如果已经用get_dummies生成了部分情感列,可通过reindex补全缺失列并填充0,再合并到原DataFrame。
示例代码:
# 用get_dummies生成临时结果 temp_df = pd.get_dummies(pd.Series(text_emotion)).sum().to_frame().T # 补全所有目标情感列,缺失项填0 temp_df = temp_df.reindex(columns=emotion_cols, fill_value=0) # 合并到原表 df = pd.concat([df, temp_df], axis=1)
批量处理优化
如果是对DataFrame中每行文本做情感分析,用apply批量生成标记更高效:
def get_emotion_flags(text): # 替换为你的NRCLex分析逻辑,返回情感列表 text_emotion = nrclex.NRCLex(text).affect_frequencies.keys() # 初始化全0字典 flags = {col: 0 for col in emotion_cols} for emo in text_emotion: if emo in flags: flags[emo] = 1 return pd.Series(flags) # 批量生成情感标记并合并 df = pd.concat([df, df['text_column'].apply(get_emotion_flags)], axis=1)
以上方法均可保证生成的情感列与原DataFrame结构完全匹配,不会出现列缺失问题。
内容的提问来源于stack exchange,提问作者reign
相关产品推荐
相关产品推荐

