【发布时间】:2021-11-10 02:05:22
【问题描述】:
我有一个这样的数据框:
text, pos
No thank you. [(No, DT), (thank, NN), (you, PRP)]
They didn't respond [(They, PRP), (didn't, VBP), (respond, JJ)]
我想在pos 上应用一个函数并将结果保存在一个新列中。所以输出看起来像这样:
text, pos score
No thank you. [(No, DT), (thank, NN), (you, PRP)] [[0.0, 0.0, 1.0], [], [0.5, 0.0, 0.45]]
They didn't respond [(They, PRP), (didn, VBP), (respond, JJ)] [[0.0, 0.0, 1.0], [], [0.75, 0.0, 0.25]]
所以函数为列表中的每个元组返回一个列表(但函数的实现不是这里的重点,为此我只是调用get_sentiment )。
我可以使用嵌套循环来做到这一点,但我不喜欢它。我想使用更 Pythonic 和 Pandas Dataframe 的方式来做到这一点:
这是我迄今为止尝试过的:
df['score'] = df['pos'].apply(lambda k: [get_sentiment(x,y) for j in k for (x,y) in j])
但是,它会引发此错误:
ValueError: too many values to unpack (expected 2)
so中有几个问题,但答案在R中。
为了更清楚:
get_sentiment 函数是NLTK 中的一个函数,它为每个单词分配一个分数列表(该列表是[positive score, negative score, objectivity score])。总的来说,我需要在我的 Dataframe 的 pos 列之上应用该函数。
【问题讨论】:
-
这些列表中的值的参考或参考是什么?例如,您如何确定
(No, DT)转换为[0.0, 0.0, 1.0]? -
@ashkangh 我已经调用了
NLTK的get_sentiment函数。所以它的作用是为每个单词分配一个分数。但我不需要该部分,因为该功能已经完美运行。我不知道如何在我的 Dataframe 中的pos列之上应用该函数。 -
@ashkangh 该列表是
[positive score, negative score, objectivity score]。这是分配给每个元组的列表。但我觉得我们不需要这个细节,因为我的问题更笼统,是如何合并两个嵌套循环并应用。 -
假设
get_sentiment函数完全按照您的说法 - 将元组作为唯一参数并返回分数列表,也许这样的事情会起作用?df['score'] = df['pos'].apply(lambda k: [get_sentiment(j) for j in k])
标签: python pandas nested-loops