簡體   English   中英

如何使用Pandas匹配正則表達式模式並將其替換為匹配組?

[英]How to match regex pattern and replace it with a matching group using 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

應該起作用的另一種變體(假設s是您的系列)類似於

s.apply(lambda r : re.sub('.*_([^_]*)$', '\\1', r))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM