更正 re.compile 以消除句点,但添加 space 作为逗号
Correct re.compile to eliminate periods but add space for comma
我有几行 python 代码遍历列表并从每一行中删除标点符号。这里的代码运行
import pandas as pd
import re
data = [['M.B.B.S'], ['M.B.B.S,B.S'],['ACN-P, D.N.P'],['ACNP-BC, DNP']]
df = pd.DataFrame(data, columns = ['ID'])
p = re.compile(r'[^\w\s\d]+')
df['ID'] = [p.sub('',x) for x in df['ID'].tolist()]
df
我面临的问题是我需要像上面那样用句点和破折号(“.”、“-”)代替 space,但逗号(“,” ) 替换 spaces。我无法获得正确的表达式语法。
例如,当我需要它读取“MBBS BS”
时,第 2 行给出了结果“MBBSBS”
只需在正则表达式之前进行备用替换:
df['ID'] = [p.sub('',x.replace(',',' ')) for x in df['ID'].tolist()]
或者,只需使用 Python 字符串方法 .translate 并完全跳过正则表达式:
import pandas as pd
import string
repl={ord(k):'' for k in string.punctuation}
repl[ord(',')]=' '
data = [['M.B.B.S'], ['M.B.B.S,B.S'],['ACN-P, D.N.P'],['ACNP-BC, DNP']]
df = pd.DataFrame(data, columns = ['ID'])
df['ID'] = [x.translate(repl) for x in df['ID'].tolist()]
>>> df
ID
0 MBBS
1 MBBS BS
2 ACNP DNP
3 ACNPBC DNP
如果您不想 ', '
变成两个空格,只需在其他替换之前替换那些:
df['ID'] = [x.replace(', ',' ').translate(repl) for x in df['ID'].tolist()]
你明白了...
你可以这样做:
df['ID'] = df.ID.str.replace('[.-]|(,\s*)',lambda x: ' ' if x.group(1) else '')
df
ID
0 MBBS
1 MBBS BS
2 ACNP DNP
3 ACNPBC DNP
如果这很复杂,请执行:
df['ID'] = df.ID.str.replace('[.-]','').str.replace(',\s*',' ')
df
ID
0 MBBS
1 MBBS BS
2 ACNP DNP
3 ACNPBC DNP
我有几行 python 代码遍历列表并从每一行中删除标点符号。这里的代码运行
import pandas as pd
import re
data = [['M.B.B.S'], ['M.B.B.S,B.S'],['ACN-P, D.N.P'],['ACNP-BC, DNP']]
df = pd.DataFrame(data, columns = ['ID'])
p = re.compile(r'[^\w\s\d]+')
df['ID'] = [p.sub('',x) for x in df['ID'].tolist()]
df
我面临的问题是我需要像上面那样用句点和破折号(“.”、“-”)代替 space,但逗号(“,” ) 替换 spaces。我无法获得正确的表达式语法。 例如,当我需要它读取“MBBS BS”
时,第 2 行给出了结果“MBBSBS”只需在正则表达式之前进行备用替换:
df['ID'] = [p.sub('',x.replace(',',' ')) for x in df['ID'].tolist()]
或者,只需使用 Python 字符串方法 .translate 并完全跳过正则表达式:
import pandas as pd
import string
repl={ord(k):'' for k in string.punctuation}
repl[ord(',')]=' '
data = [['M.B.B.S'], ['M.B.B.S,B.S'],['ACN-P, D.N.P'],['ACNP-BC, DNP']]
df = pd.DataFrame(data, columns = ['ID'])
df['ID'] = [x.translate(repl) for x in df['ID'].tolist()]
>>> df
ID
0 MBBS
1 MBBS BS
2 ACNP DNP
3 ACNPBC DNP
如果您不想 ', '
变成两个空格,只需在其他替换之前替换那些:
df['ID'] = [x.replace(', ',' ').translate(repl) for x in df['ID'].tolist()]
你明白了...
你可以这样做:
df['ID'] = df.ID.str.replace('[.-]|(,\s*)',lambda x: ' ' if x.group(1) else '')
df
ID
0 MBBS
1 MBBS BS
2 ACNP DNP
3 ACNPBC DNP
如果这很复杂,请执行:
df['ID'] = df.ID.str.replace('[.-]','').str.replace(',\s*',' ')
df
ID
0 MBBS
1 MBBS BS
2 ACNP DNP
3 ACNPBC DNP