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

如何为Pandas DataFrame逐行调用AFINN.score生成评分列?

问题:为DataFrame逐行计算AFINN情感评分

我有一个包含columns = ["UID", ... "reviewText"]列的DataFrame,想要添加一列,使用afinn包中的afinn.score函数分析reviewText列内容的AFINN评分。

最初尝试的代码如下:

import numpy as np
import pandas as pd
from afinn import Afinn
afn = Afinn()

df_analysis = pd.read_csv(data)

df_analysis["AFINN"] = afn.score(str(df_analysis["reviewText"]))

afn.score函数传入单个字符串时运行正常,但生成的DataFrame中AFINN列全为0,请问我哪里操作有误?

编辑:我意识到直接转成字符串的方式不正确,于是尝试了以下代码:

df_analysis["AFINN"] = afn.score(df_analysis["actualText"].to_string())

但这样得到的是所有评论的综合AFINN评分。请问有没有办法逐行读取列值并转成字符串传入afn.score函数,返回对应行的评分值?


解决方法

错误原因

  • 第一次尝试里,str(df_analysis["reviewText"])是把整个reviewText列的Series对象转换成了类似<Series [数据...]>的字符串格式,并不是把每行的文本单独传入afn.score,afinn无法识别这种格式里的有效情感词,所以结果全为0。
  • 第二次用to_string()是把整个列的所有文本合并成了一个超大字符串,计算的自然是所有评论的总评分,而非每行单独的评分。

正确实现

用Pandas的apply方法,对reviewText列的每一行文本单独调用afn.score函数:

import numpy as np
import pandas as pd
from afinn import Afinn
afn = Afinn()

df_analysis = pd.read_csv(data)

# 逐行应用afn.score函数,转字符串避免空值/非字符串类型报错
df_analysis["AFINN"] = df_analysis["reviewText"].apply(lambda x: afn.score(str(x)))

如果你的目标列是actualText(和编辑里的代码对应),把reviewText替换成actualText即可。

apply会遍历列中的每个元素,把每个元素传入lambda函数的x,转成字符串后调用afn.score计算单条评论的情感评分,最终生成对应每行的AFINN评分列。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:52:49