Pandas dataframe:将长的正则表达式拆分为多行

54 浏览
0 Comments

Pandas dataframe:将长的正则表达式拆分为多行

我正在使用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)

但是,在Pandas中无法工作。有什么想法我缺失了什么?

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

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

FIT 13.72 ON 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,PF

12240-12252,RR(添加信息)

谢谢!

admin 更改状态以发布 2023年5月20日
0
0 Comments

一个选项是创建一个字符串列表,然后在调用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>>')

0