2017-02-25 3 views
0

Ich möchte eine neue Pandas-Spalte erstellen, indem ich eine Wortstammfunktion über eine Liste von Wörtern in einer anderen Spalte führe. Ich kann eine einzelne Zeichenkette mit apply und lambda tokenisieren, aber ich kann nicht herausfinden, wie man das extrapoliert, um es über eine Liste von Wörtern zu führen.Liste aus Liste mit Funktion in Pandas Datenrahmen erstellen

test = {'Statement' : ['congratulations on the future','call the mechanic','more text'], 'Other' : [2,3,4]} 
df = pd.DataFrame(test) 
df['tokenized'] = df.apply (lambda row: nltk.word_tokenize(row['Statement']), axis=1) 

Ich weiß, dass ich es mit einem verschachtelten for-Schleife lösen könnte, aber das scheint ineffizient und führt zu einer SettingWithCopyWarning:

df['stems'] = '' 
for x in range(len(df)): 
    print(len(df['tokenized'][x])) 
    df['stems'][x] = row_stems=[] 
    for y in range(len(df['tokenized'][x])): 
     print(df['tokenized'][x][y]) 
     row_stems.append(stemmer.stem(df['tokenized'][x][y])) 

Gibt es einen besseren Weg, dies zu tun?

EDIT:

Hier ist ein Beispiel dafür, was das Ergebnis aussehen soll:

Other  Statement      tokenized        stems 
0 2   congratulations on the future [congratulations, on, the, future] [congratul, on, the, futur] 
1 3   call the mechanic    [call, the, mechanic]     [call, the, mechan] 
2 4   more text      [more, text]       [more, text] 
+0

Könnten Sie mit einem Beispiel bearbeiten, was das Ergebnis aussehen soll? –

Antwort

1

Keine Notwendigkeit, eine Schleife zu laufen, in der Tat. Zumindest keine explizite Schleife. Ein Listenverständnis wird gut funktionieren.

Angenommen, Sie Porter stemmer verwenden ps:

df['stems'] = df['tokenized'].apply(lambda words: 
            [ps.stem(word) for word in words]) 
Verwandte Themen