如何根据正面和负面关键词的数量,在Pandas数据框中对文本进行分类

2024-09-29 01:27:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,看起来像这样:

          Tweets                      negative_keywords positive_keywords
0   Şanlıurfa'da DAEŞ ile                       []            []
1   Hacettepe Üni. Araştırması                  []            []
2   Kadına şiddetin suç olduğu                [suç]           []
3   Suriyeli'lerin fal bakabilme                []            []
4   Hastaneye git Suriyeli. PTT ye              []      [kardeşi]

我想添加一个新的列,称为中性关键字。如果负的\u关键字和正的\u关键字同时为[],则neutral的\u关键字应取[neutral]的值。否则,它应该取[]的值。然后,我应该添加一个基于正值、负值和中性值的新列。所以,我的新数据框应该是这样的:

          Tweets                      negative_keywords positive_keywords keyword_category  keyword_category
0   Şanlıurfa'da DAEŞ ile                       []            []             [neutral]       neutral
1   Hacettepe Üni. Araştırması                  []            []             [neutral]       neutral 
2   Kadına şiddetin suç olduğu                [suç]           []                []           negative
3   Suriyeli'lerin fal bakabilme                []            []             [neutral]       neutral
4   Hastaneye git Suriyeli. PTT ye              []         [kardeşi]           []            positive

我该怎么做?你知道吗


Tags: 数据关键字tweetsdasukeywordsnegativepositive
3条回答
# define a function which returns True if all are empty lists
all_empty = lambda x: all(not lst for lst in x)
# apply function to the two columns to create a mask
mask = df[['negative_keywords', 'positive_keywords']].apply(all_empty, axis=1)
# initialize the neutral_keywords column
df['neutral_keywords'] = [[]] * len(mask)
# update the neutral_keywords column where the mask is True
df.loc[mask, 'neutral_keywords'] = [['neutral']] * mask.sum()
df

这是另一种解决方案。你知道吗

df["keyword_category"] = ['negative' if n else 'positive' if p else 'neutral' 
                            for n, p in zip(df['negative_keywords'], df['positive_keywords'])]

结果:

                           Tweets negative_keywords positive_keywords keyword_category
0            Şanlıurfada DAEŞ ile                []                []          neutral
1      Hacettepe Üni. Araştırması                []                []          neutral
2      Kadına şiddetin suç olduğu             [suç]                []         negative
3     Suriyelilerin fal bakabilme                []                []          neutral
4  Hastaneye git Suriyeli. PTT ye                []         [kardeşi]         positive

假设df中的数据是字符串列表,我将这样做。你知道吗

n_negative = df['negative_keywords'].apply(len)
n_positive = df['positive_keywords'].apply(len)
df['keyword_category'] = 'neutral'
df.loc[n_negative > 0, 'keyword_category'] = 'negative'
df.loc[n_positive > 0, 'keyword_category'] = 'positive'  # May over-write negatives

输出:

>>> df
                           Tweets negative_keywords positive_keywords keyword_category
0           Şanlıurfa'da DAEŞ ile                []                []          neutral
1      Hacettepe Üni. Araştırması                []                []          neutral
2      Kadına şiddetin suç olduğu             [suç]                []         negative
3    Suriyeli'lerin fal bakabilme                []                []          neutral
4  Hastaneye git Suriyeli. PTT ye                []         [kardeşi]         positive

您可能需要考虑的另一种选择是:

n_negative = df['negative_keywords'].apply(len)
n_positive = df['positive_keywords'].apply(len)
df['keyword_category'] = 'neutral'
df.loc[n_negative > n_positive, 'keyword_category'] = 'negative'
df.loc[n_positive > n_negative, 'keyword_category'] = 'positive'

相关问题 更多 >