How to split one letter and dot into the different rows

Viewed 220

I have a dataframe with two columns, that is columns Word and Tag. The df:

                      Word   Tag
0                    Pada    A
1                 bakteri    B 
2                       ,    C 
3       ketumpangtindihan    D  
4                     ini    E
5             kemungkinan    F
6                terlibat    G
7                   dalam    H
8                regulasi    I
9             transkripsi    O
10                   gen.    O

and I'd like to separate some row contains one word with dot . word+. to be two row. So the output should be the following:

                      Word   Tag
0                    Pada    A
1                 bakteri    B 
2                       ,    C 
3       ketumpangtindihan    D  
4                     ini    E
5             kemungkinan    F
6                terlibat    G
7                   dalam    H
8                regulasi    I
9             transkripsi    O
10                    gen    O
11                      .    O 

Any ideas? Thanks in advance. If I did explode, the punctuation is missing.

2 Answers

Heres an inefficient answer ;))

import pandas as pd

data = [['Alex.',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])
for x in df['Name']:
  if (x[-1] =='.'):
    df['Name'].replace(x,x[:-1],inplace=True)
    df = df.append({'Name':'.','Age':14},ignore_index=True) #assign your tag
print(df)

Output before:

     Name  Age
0   Alex.   10
1     Bob   12
2  Clarke   13

output :

     Name  Age
0    Alex   10
1     Bob   12
2  Clarke   13
3       .   14

Try:

df['Word'] = df['Word'].str.split('(?<=\w)\.')
df = df.explode('Word')

map = df['Word'].groupby(level=0).cumcount().ge(1)
df.loc[map, 'Word'] = '.' + df.loc[map, 'Word']
df = df.reset_index(drop=True)

Some notes:

(?<=\w) - matches everything what has any alphanumeric character before

\. - matches dot

So in essence you will split by dot, preceded by alphanumeric. Then you will manually add dot in front of every second, and later elements of splitted string.

Outputs in your case:

                 Word Tag
0                Pada   A
1             bakteri   B
2                   ,   C
3   ketumpangtindihan   D
4                 ini   E
5         kemungkinan   F
6            terlibat   G
7               dalam   H
8            regulasi   I
9         transkripsi   O
10                gen   O
11                  .   O
Related