Pandas数据帧:将长regex拆分为多行



我正在使用Pandas进行一些数据清理,我有一个很长的正则表达式,我想将其拆分为多行。以下在Pandas中运行良好,因为它都在一条线上:

df['REMARKS'] = df['REMARKS'].replace(to_replace =r'(?=[^])}]*([[({]|$))b(?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL)b(?:s*(?:,s*)?(?:(?:or|and)s+)?(?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL))*b', value = r'<g<0>>', regex = True)

然而,这很难管理。我尝试了以下在常规Python中有效的详细方法:

df['REMARKS'] = df['REMARKS'].replace(to_replace =r"""(?=[^])}]*([[({]|$))
b(?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL)
b(?:s*(?:,s*)?(?:(?:or|and)s+)?
(?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL))*b""", value = r'<g<0>>', regex = True)

不过,这在熊猫身上不起作用。你知道我错过了什么吗?

以下是一些测试示例文本:

GR、MDT、CMR、HLDS、NEXT、NGI@25273、COMPTG

将13.72安装在9-7/8 LNR、LWD[GR、RES、APWD、SONVIS]、MDTS(PRESS和SAMP(上ROT SWC,TSTG BOP

LWD[GR,RES,APWD,SONVIS],GR,RES、NGI、PPC@31937,MDTS(PRESS&SAMP(TKG ROT SWC

LWD[GR,RES]@12586,IND,FDC,CNL,GR@12586、SWC,RAN CSG,PF12240-12252,RR(添加信息(

谢谢!

一个选项是创建字符串列表,然后在调用replace时使用join

RegEx = [r'(?=[^])}]*([[({]|$))b(?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL)',
r'b(?:s*(?:,s*)?(?:(?:or|and)s+)?',
r'(?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL))*b']
df['REMARKS'] = df['REMARKS'].replace(to_replace=''.join(RegEx), value=r'<g<0>>', regex=True)

使用re

import re
s = r"""(?=[^])}]*([[({]|$))b(?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL)
b(?:s*(?:,s*)?(?:(?:or|and)s+)?
(?:GR|MDT|CMR|HLDS|NEXT|NGI|MDTS|RES|PPC|IND|FDC|CNL))*b"""
df['REMARKS'] = df['REMARKS'].replace(to_replace=re.compile(s, re.VERBOSE), value=r'<g<0>>')

最新更新