【问题标题】:regex in string pandas (split)字符串 pandas 中的正则表达式(拆分)
【发布时间】:2021-02-10 16:50:09
【问题描述】:

您好,我有一个字符串,例如:

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

有人知道问题出在哪里吗?

【问题讨论】:

标签: python regex split


【解决方案1】:

你可以使用:

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

【讨论】:

  • 如果它在 dataframe 上怎么办?我仍然可以使用 re 吗?例如df['column'].re.split(i.split(r'(?&lt;=[0-9])_')
  • 由于您没有显示数据框,因此答案基于所提供的代码。但是是的,数据框也有一个拆分,但形式不同。请更新您的问题,以便我提供进一步帮助。
  • 您可以使用:df['column'].str.split(r'(?&lt;=[0-9])_') 或查看更新的答案。
  • 请重新关闭问题,它仍然是 stackoverflow.com/questions/48919003/pandas-split-on-regex?rq=1 的骗子,现在写的仍然是 stackoverflow.com/questions/13209288/… 的骗子
  • 我很少重新打开欺骗问题,但由于标题和问题正文不匹配,这是其中之一。我已经要求 OP 编辑​​问题。编辑问题后,我将重新访问以检查此链接是否重复。
【解决方案2】:
l=['NW_011625257.1_0','scaffold1_3','scaffold3']

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

输出

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2013-11-19
    • 2011-06-18
    • 2011-10-16
    相关资源
    最近更新 更多