gpt4 book ai didi

python - 如何在数据集的所有行上应用正则表达式?

转载 作者:行者123 更新时间:2023-12-03 16:01:28 24 4
gpt4 key购买 nike

我有一个数据集如下:

    data = {"C1" : ['DDDSSDSSDS','SSDDDSSDDS', 
'DDDDDDDDDD','SSSSSSSSSS','SSSSSSSDSS','DDDDDSDDDD','SDDDDDDDDD']}
dt = pd.DataFrame(data)
print(dt)
对于每个字符串,我想获取每个“不间断 S 组”的第一个元素和最后一个元素的位置。例如,对于第一行,我有 'DDD SS D SS D 小号 '(如您所见,我有三组 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, , , , , , , , , , ]

最佳答案

您可以使用

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字符,你需要使用 +匹配一个或多个。

关于python - 如何在数据集的所有行上应用正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64298113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com