【问题标题】:How to split one letter and dot into the different rows如何将一个字母和一个点分成不同的行
【发布时间】:2021-02-01 22:00:32
【问题描述】:

我有一个包含两列的数据框,即 Word 和 Tag 列。 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

我想用 dot 分隔一些包含一个单词的行。 word+. 是两排。所以输出应该如下:

                      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 

有什么想法吗?提前致谢。如果我输入了explode,则缺少标点符号。

【问题讨论】:

    标签: python pandas numpy dataframe explode


    【解决方案1】:

    这是一个低效的答案;))

    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)
    

    之前的输出:

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

    输出:

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

    【讨论】:

      【解决方案2】:

      试试:

      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)
      

      一些注意事项:

      (?&lt;=\w) - 匹配之前有任何字母数字字符的所有内容

      \. - 匹配点

      所以本质上你会按点分割,前面是字母数字。然后你将在每一秒的前面手动添加点,然后是拆分字符串的后面元素。

      您的情况下的输出:

                       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
      

      【讨论】:

      • 我收到了这个错误ValueError: split() requires a non-empty pattern match.
      • 尝试升级您的pandas,否则您将不得不从拆分中删除“点”并将模式替换为:'(?&lt;=\w)\.'
      • 我尝试将模式替换为:'(?&lt;=\w)\.',但输出更改为空行点drive.google.com/file/d/1LsjHq74zA4juaoRBRdXIhq1b8w7C6zee/…
      • 是的,除非你升级,否则你不能用空字符分割(即你不能在不丢失分隔符的情况下分割)
      • 我已经升级到pandas-1.1.3,但是输出还是一样
      猜你喜欢
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多