regex em string pandas (divisão)

Oct 28 2020

Olá, tenho strings como:

liste_to_split=['NW_011625257.1_0','scaffold1_3','scaffold3']

e eu gostaria de dividi-los no Number_Numberque tentei:

for i in liste_to_split:
 i.split(r'(?<=[0-9])_')

e eu tenho

['NW_011625257.1_0']
['scaffold1_3']
['scaffold3']

ao invés de

['NW_011625257.1'] ['0']
['scaffold1'] ['3']
['scaffold3']

alguém sabe onde está o problema?

Respostas

1 anubhava Oct 28 2020 at 17:27

Você pode usar:

>>> import re
>>> liste_to_split=['NW_011625257.1_0','scaffold1_3','scaffold3']
>>> 
>>> for i in liste_to_split:
...     re.split(r'(?<=[0-9])_', i)
...
['NW_011625257.1', '0']
['scaffold1', '3']
['scaffold3']

Observe o uso de em re.splitvez de string.splite usando a _afirmação lookbehind externo para garantir que não estamos dividindo em uma correspondência de largura zero.


Com base no comentário do OP abaixo, parece que o OP deseja fazer essa divisão para uma dataframecoluna. Nesse caso, use:

Supondo que este seja o seu dataframe:

>>> print (df)
             column
0  NW_011625257.1_0
1       scaffold1_3
2         scaffold3

Então você pode usar:

>>> print (df['column'].str.split(r'(?<=[0-9])_', expand=True))
                0     1
0  NW_011625257.1     0
1       scaffold1     3
2       scaffold3  None
1 Noname Oct 28 2020 at 17:39
l=['NW_011625257.1_0','scaffold1_3','scaffold3']

for i in l:
  f = i.split('_')
  print(f) 

resultado

['NW', '011625257.1', '0']
['scaffold1', '3']
['scaffold3']