我有以下 Pandas 系列:
SC_S193_M7.CONTROLDAY10.EPI.P1_Stem
SC_S194_M7.CONTROLDAY10.EPI.P1_Goblet
SC_S102_M1.CONTROLDAY3.EPI2_Enterocyte
SC_S106_M1.CONTROLDAY3.EPI2_Goblet
我想使用正则表达式提取本系列每一行中最后一个下划线之后的字符串。我能够想出与最后一个字符串匹配的正则表达式,但请注意如何在 pandas 系列方法中实现它。
我用来匹配模式并用第一个匹配组替换的正则表达式\1:
SC_S\d{3}_M\d\.CONTROLDAY\d{1,2}\.EPI\d?(?:\.P\d_|_)
我尝试如下使用 .replace() 但没有成功:
.replace('SC_S\d{3}_M\d\.CONTROLDAY\d{1,2}\.EPI\d?(?:\.P\d_|_)(\w+) ')
知道如何使用 Pandas 系列方法提取下划线之前的最后一个字符串或找到匹配模式并将其替换为第一组吗?
请您参考如下方法:
我认为您可以拆分它而不是使用 RegEx:
In [170]: s
Out[170]:
0 SC_S193_M7.CONTROLDAY10.EPI.P1_Stem
1 SC_S194_M7.CONTROLDAY10.EPI.P1_Goblet
2 SC_S102_M1.CONTROLDAY3.EPI2_Enterocyte
3 SC_S106_M1.CONTROLDAY3.EPI2_Goblet
Name: 0, dtype: object
In [171]: s.str.split('_').str[-1]
Out[171]:
0 Stem
1 Goblet
2 Enterocyte
3 Goblet
Name: 0, dtype: object
或更好地使用 rsplit(..., n=1):
In [174]: s.str.rsplit('_', n=1).str[-1]
Out[174]:
0 Stem
1 Goblet
2 Enterocyte
3 Goblet
Name: 0, dtype: object
或者你可以使用.str.extract():
In [177]: s.str.extract(r'.*_([^_]*)$', expand=False)
Out[177]:
0 Stem
1 Goblet
2 Enterocyte
3 Goblet
Name: 0, dtype: object
