regex ในสตริงแพนด้า (แยก)

Oct 28 2020

สวัสดีฉันมีสตริงเช่น:

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

และฉันต้องการแยกพวกเขาตามที่Number_Numberฉันพยายาม:

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

และฉันก็ได้

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

แทน

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

มีใครรู้ไหมว่าปัญหาอยู่ที่ไหน

คำตอบ

1 anubhava Oct 28 2020 at 17:27

คุณสามารถใช้:

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

สังเกตการใช้re.splitแทนstring.splitและใช้การ_ยืนยันรูปลักษณ์ภายนอกเพื่อให้แน่ใจว่าเราไม่ได้แบ่งความกว้างเป็นศูนย์


จากความคิดเห็นของ OP ด้านล่างดูเหมือนว่า OP ต้องการแยกdataframeคอลัมน์นี้ ในกรณีนั้นให้ใช้:

สมมติว่านี่คือดาต้าเฟรมของคุณ:

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

จากนั้นคุณสามารถใช้:

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

เอาท์พุท

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