Regex in String Pandas (Split)

Oct 28 2020

Hallo, ich habe eine Zeichenfolge wie:

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

und ich würde sie gerne teilen, wenn Number_Numberich es versuchte:

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

und ich bekam

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

Anstatt von

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

Weiß jemand, wo das Problem liegt?

Antworten

1 anubhava Oct 28 2020 at 17:27

Sie können verwenden:

>>> 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']

Beachten Sie die Verwendung von re.splitanstelle von string.splitund die Verwendung der _externen Lookbehind-Zusicherung, um sicherzustellen, dass keine Übereinstimmung mit einer Breite von Null erfolgt.


Basierend auf dem Kommentar von OP unten scheint OP diese Aufteilung für eine dataframeSpalte durchführen zu wollen. In diesem Fall verwenden Sie:

Angenommen, dies ist Ihr Datenrahmen:

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

Dann können Sie verwenden:

>>> 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) 

Ausgabe

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