2017-05-08 2 views
2

Ich habe eine Liste, die ich zu einem Pandas-Datenrahmen hinzufügen, es enthält eine Reihe von Dezimalwerten. Ich möchte es in drei Bereiche aufzuteilen jeder Bereich einen Wert repräsentiertErsetzen eines Bereichs von Werten mit einem Wert

sents=[] 
for sent in sentis: 
if sent > 0: 
    if sent < 0.40: 
     sents.append('negative') 
    if (sent >= 0.40 and sent <= 0.60): 
     sents.append('neutral') 
    if sent > 0.60 
     sents.append('positive') 

meine Frage ist, ob es eine effizientere Art und Weise in Pandas ist, dies zu tun, wie ich versuche, diese auf einer größeren Liste zu implementieren und

Vielen Dank im Voraus.

Antwort

0

Liste Verständnis:

['negative' if x < 0.4 else 'positive' if x > 0.6 else 'neutral' for x in sentis] 
2

können Sie pd.cut verwenden, um die Ergebnisse zu produzieren, die vom Typ sind categorical und haben die entsprechenden Etiketten.

Um die Aufnahme von .4 und .6 für die neutral Kategorie zu beheben, ich addieren und subtrahieren die kleinsten Schwimmer epsilon

sentis = np.linspace(0, 1, 11) 
eps = np.finfo(float).eps 

pd.DataFrame(dict(
     Value=sentis, 
     Sentiment=pd.cut(
      sentis, [-np.inf, .4 - eps, .6 + eps, np.inf], 
      labels=['negative', 'neutral', 'positive'] 
     ), 
    )) 

    Sentiment Value 
0 negative 0.0 
1 negative 0.1 
2 negative 0.2 
3 negative 0.3 
4 neutral 0.4 
5 neutral 0.5 
6 neutral 0.6 
7 positive 0.7 
8 positive 0.8 
9 positive 0.9 
10 positive 1.0 
+0

Vielen Dank genau das, was ich suche –

Verwandte Themen