2017-04-19 2 views
1

J'ai une trame de données avec une col qui a du texte. Je veux appliquer textblob et calculer la valeur de sentiment pour chaque rangée.Appliquer textblob pour chaque ligne d'une dataframe

text    sentiment 

ce qui est excellent
grand film grande histoire

Quand j'exécute le code ci-dessous:

df['sentiment'] = list(map(lambda tweet: TextBlob(tweet), df['text']))

Je reçois l'erreur:

TypeError: The `text` argument passed to `__init__(text)` must be a string, not <class 'float'> 

Comment Appliquez-vous textBLob à chaque ligne d'un col dans une image pour obtenir la valeur du sentiment?

Répondre

1

Vous pouvez utiliser .apply:

df['sentiment'] = df['text'].apply(lambda tweet: TextBlob(tweet).sentiment) 

renvoie un sentiment namedtuple de la forme Sentiment (polarité, subjectivité). Mais êtes-vous sûr que chaque ligne de df['text'] est en format de chaîne de caractères? Sinon, vous pouvez essayer ci-dessous pour revenir None si le texte ne peut pas être traité par TextBlob:

def sentiment_calc(text): 
    try: 
     return TextBlob(text).sentiment 
    except: 
     return None 

df['sentiment'] = df['text'].apply(sentiment_calc) 
+0

Merci le second a travaillé. – user2585048