如何将正则表达式应用于数据集的所有行?

我有一个数据集如下:


    data = {"C1" : ['DDDSSDSSDS','SSDDDSSDDS', 

   'DDDDDDDDDD','SSSSSSSSSS','SSSSSSSDSS','DDDDDSDDDD','SDDDDDDDDD']}

    dt = pd.DataFrame(data)

    print(dt)

对于每个字符串,我想获取每个“不间断 S 组”的第一个元素和最后一个元素的位置。例如,对于第一行,我有“DDD SS D SS D S ”(如您所见,我有三组 S),我最喜欢的“S 组”输出类似于[(3,5),(6,8),(9-10)]显示第一和第二的位置第一排第三个“不间断的S组”。


因此输出的示例如下:


           C1                         C2

0  DDDSSDSSDS       [(3, 5), (6, 8), (9-10)]

1  SSDDDSSDDS  [(0, 2), (5, 7), (9, 10)]

2  DDDDDDDDDD                         []

3  SSSSSSSSSS                  [(1, 11)]

4  SSSSSSSDSS          [(0, 7), (8, 10)]

5  DDDDDSDDDD                   [(5, 6)]

6  SDDDDDDDDD                   [(0, 1)]

我当前的解决方案是:


def split_it(mystring):

    x = re.findall('(S*)', mystring)

    if x :

      return(x)


dt['C2'] = dt['C1'].apply(split_it)

print(dt)

这会导致以下输出:


0  DDDSSDSSDS  [, , , SS, , SS, , S, ]

1  SSDDDSSDDS  [SS, , , , SS, , , S, ]

2  DDDDDDDDDD   [, , , , , , , , , , ]

3  SSSSSSSSSS           [SSSSSSSSSS, ]

4  SSSSSSSDSS        [SSSSSSS, , SS, ]

5  DDDDDSDDDD  [, , , , , S, , , , , ]

6  SDDDDDDDDD  [S, , , , , , , , , , ]


HUH函数
浏览 94回答 2
2回答

慕雪6442864

您可以使用def split_it(mystring):    return [(m.start(), m.end()) for m in re.finditer('S+', mystring)]输出:>>> dt['C1'].apply(split_it)0    [(3, 5), (6, 8), (9, 10)]1    [(0, 2), (5, 7), (9, 10)]2                           []3                    [(0, 10)]4            [(0, 7), (8, 10)]5                     [(5, 6)]6                     [(0, 1)]Name: C1, dtype: object返回re.finditer('S+', mystring)字符串中找到的所有匹配对象,您可以通过.start()和.end()调用获取开始和结束位置。请注意,输出中出现空匹配,因为S*匹配零个或多个 S字符,您需要使用+来匹配一个或多个.

九州编程

您可以使用 findall 应用正则表达式:(    dt    .assign(C2= lambda x: x['C1'].str.findall('S+'))    .assign(C2= lambda x: x.apply(lambda s: [(s[0].find(item),s[0].find(item)+len(item)) for item in s[1]] ,axis=1)))           C1                        C20  DDDSSDSSDS  [(3, 5), (3, 5), (3, 4)]1  SSDDDSSDDS  [(0, 2), (0, 2), (0, 1)]2  DDDDDDDDDD                        []3  SSSSSSSSSS                 [(0, 10)]4  SSSSSSSDSS          [(0, 7), (0, 2)]5  DDDDDSDDDD                  [(5, 6)]6  SDDDDDDDDD                  [(0, 1)]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python