Mam pandas dataframe df formularza:

df = pd.DataFrame.from_dict({'ID':[1,2,3], \
'Strings':['Hello, how are you?', 'Nice to meet you!', 'My name is John.']})

Chcę tokenizować kolumnę Struny i utwórz nowe ramki danych new_df :

Sentence    Word
   0        Hello
   0        ,
   0        how
   0        are
   0        you
   0        ?
   1        Nice
   1        to
   1        meet
   1        you
   1        .
   2        My
   2        name
   2        is
   2        John
   2        .

Wiem do tokenizacji Mogę używać NLTK.Word_Tokokeize () dla String Evert W DF , ale jak mogę uzyskać z tego punktu do NEW_DF w sposób skuteczny?

2
Melsauce 21 luty 2019, 04:20

2 odpowiedzi

Najlepsza odpowiedź

Możesz to zrobić za pomocą map i stack:

import nltk
pd.DataFrame(df.Strings.map(nltk.word_tokenize).tolist(), index=df.ID).stack()

Aby oczyścić indeks, użyj reset_index.

(pd.DataFrame(df.Strings.map(nltk.word_tokenize).tolist(), index=df.ID)
   .stack()
   .reset_index(level=1, drop=True)
   .reset_index(name='Word'))

    ID   Word
0    1  Hello
1    1      ,
2    1    how
3    1    are
4    1    you
5    1      ?
6    2   Nice
7    2     to
8    2   meet
9    2    you
10   2      !
11   3     My
12   3   name
13   3     is
14   3   John
15   3      .
3
cs95 21 luty 2019, 01:27

Po tym, jak Nltk problem stał się Unnesting

df.Strings=df.Strings.map(nltk.word_tokenize).tolist()

unnesting(df,['Strings'])
Out[22]: 
  Strings  ID
0   Hello   1
0       ,   1
0     how   1
0     are   1
0     you   1
0       ?   1
1    Nice   2
1      to   2
1    meet   2
1     you   2
1       !   2
2      My   3
2    name   3
2      is   3
2    John   3
2       .   3
2
BENY 21 luty 2019, 01:47