0

Python新手在这里!我真的可以在我用 Python 做的一个情感项目上得到一些帮助。

我已经建立了这本字典,我想用它来浏览我从卫报文章中摘录的评论。我想在数据框中添加一个额外的列guardian_comments,表示该列中的值sentiment_score是very_negative、negative、neutral、positive 还是very_positive:

lookup_dict = {
"very_negative":[-0.9, -0.8, -0.7, -0.6], 
"negative":[-0.5, -0.4, -0.3, -0.2, -0.1],
"neutral":[0],
"positive":[0.1, 0.2, 0.3, 0.4, 0.5], 
 "very_positive":[0.6, 0.7, 0.8, 0.9, 1]}

guardian_comments['sentiment_level'] = guardian_comments['sentiment_score'].map(lambda x: lookup_dict[x])

但是,我收到了一个KeyError我认为这取决于字典列表尚未转换为浮点数的事实。谁能建议我如何做到这一点?

谢谢!

4

2 回答 2

1

lookup_dict[x]lookup_dict用 key检索条目x
例如lookup_dict["very_negative"]会返回[-0.9, -0.8, -0.7, -0.6]lookup_dict[-0.6]会导致一个KeyError.
所以你的 lambda 函数并不像你想象的那样。

我认为最简单的解决方案是这样的:

lookup_dict = {
    -0.9:"very_negative",
    -0.8:"very_negative",
    -0.7:"very_negative",
    -0.6:"very_negative",
    -0.5:"negative",
    -0.4:"negative",
    -0.3:"negative",
    -0.2:"negative",
    -0.1:"negative",
    0:"neutral",
    0.1:"positive",
    0.2:"positive",
    0.3:"positive",
    0.4:"positive",
    0.5:"positive",
    0.6:"very_positive",
    0.7:"very_positive",
    0.8:"very_positive",
    0.9:"very_positive",
    1:"very_positive"
}

guardian_comments['sentiment_level'] = guardian_comments['sentiment_score'].map(lambda x: lookup_dict[x])
于 2021-02-09T19:48:10.240 回答
1

如果您希望保持字典的当前结构,最容易做到这一点的方法是定义一个辅助函数,您可以将其作为 lambda 应用到字典中:

def find_level(row):
    for key, value in lookup_dict.items():
        if row['sentiment_score'] in value:
            return key

df['sentiment_level'] = df.apply(lambda row: find_level(row), axis = 1)

#output:
   sentiment_score sentiment_level
0             -0.5        negative
1              0.5        positive
2              0.6   very_positive
3             -0.2        negative
4             -0.1        negative
于 2021-02-09T20:00:38.447 回答