2017-02-25 13 views
0

다른 열의 단어 목록에 단어 형태소 분석 기능을 실행하여 새 팬더 열을 만들고 싶습니다. apply와 lambda를 사용하여 하나의 문자열을 토큰화할 수 있지만 단어 목록을 통해 실행하는 경우를 추정하는 방법을 알 수는 없습니다.목록에서 팬더 데이터 프레임의 함수 목록을 만듭니다.

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) 

는 내가 루프 중첩으로 해결할 수 알지만, 그건 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])) 

이 아닌가?

편집 : 실제로,

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

하면 결과가 어떻게 보일지의 예와 편집 수 :

당신이 포터 형태소 분석기 ps를 사용하는 가정? –

답변

1

루프를 실행할 필요가 없습니다 :

여기 결과가 어떻게 보일지의 예입니다. 적어도 명백한 루프는 아닙니다. 목록 이해력은 정상적으로 작동합니다.

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