簡體   English   中英

如何根據正面和負面關鍵字的數量對熊貓數據框中的文本進行分類

[英]How to categorize text in a pandas dataframe based on the number of positive and negative keywords

我有一個看起來像這樣的熊貓數據框:

          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]

我想添加一個名為 neutral_keywords 的新列。 如果negative_keywords和positive_keywords同時為[],neutral_keywords應該取[neutral]的值。 否則,它應該取 [] 的值。 然后,我應該根據正面、負面和中性的值添加一個新列。 所以,我的新 pandas 數據框應該是這樣的:

          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

我怎樣才能做到這一點?

假設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'
# 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM