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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:54:36