2017-06-07 13 views
0

Das scheint so eine einfache Frage zu sein, aber ich möchte Schleifen möglichst vermeiden. Ich habe die folgenden Daten in einem Panda Spalte:Anwenden von Synsets auf Pandas

df['token']: 
0  [If, you, can, only, visit, one, museum, in, N... 
1  [Do, n't, let, the, neighborhood, ,, exterior,... 
2  [Momofuku, Milk, Bar, is, one, of, those, plac... 
3  [Have, you, been, here, ?, Tell, us, about, it... 
4  [Add, the, Palmer, Trading, Company, to, your,... 
5  [Porchetta, is, fast, and, simple, food, ., No... 

Name: Token, dtype: Objekt

Ich mag würde anwenden wordnet in der Liste auf jeden Wert funktionellen wordnet.synsets (wenn Sie verwenden, können usw.) und nur das erste Ergebnis zum Beispiel zurückgegeben:

exterior [Synset('outside.n.01'), Synset('outside.n.02'), Synset('exterior.a.01')] 

ich in der Lage sein möchten, verwenden Sie gelten nur das erste Ergebnis zu verwenden: Synset (‚outside.n.01‘)

+0

Ich bin ein wenig verwirrt, wenn Sie nur das erste Ergebnis verwenden, gibt es keine Notwendigkeit, die Funktion auf einem der anderen auszuführen? I.e. Könnten Sie eine Funktion anwenden, die "Synset" nur auf dem ersten Element einer Liste aufruft? – OldGeeksGuide

+0

Ich bin kein Experte in Bezug auf Nltk oder Wordnet, aber ich glaube, Sie können nur ein einzelnes Wort an die Funktion übergeben und das eine Liste zurückgibt. –

Antwort

0

Von Ihren Kommentaren, Ich denke, was Sie suchen, ist eine Möglichkeit, jedes der Wörter mit dem ersten Ergebnis von synsets auf dem Wort zu ersetzen, ist das korrekt? Sie müssen nur eine Funktion, die Synsets wickelt, die eine Liste von Wörtern akzeptiert, und liefert das erste Element von dem, was für jeden von denen Synset kehrt:

def first(wordlist): 
    # wordlist is a list of words, i.e. ['sun', 'shine', 'spotless'] 
    return [synsets(word)[0] for word in wordlist] 

Dann nutzen applymap es auf jedes Element der Datenrahmen auszuführen:

df.applymap(first) 

Ist es das, was Sie versuchen?

+0

Ist es möglich, zwei Pandas-Spalten zur Anwendung zu passen? –

+0

Ich denke, ich fand die Antwort auch zu df ['Wert'] = df.apply (Lambda Zeile: mein_test (Zeile ['a'], Zeile ['c']), Achse = 1) –

+0

Um zwei Spalten zu übergeben Du könntest df [['col1', 'col2']]]. appmap (...) – OldGeeksGuide

Verwandte Themen