Python 更正重新编译以消除句点,但为逗号添加空间
我有几行python代码,它们遍历了一个列表并从每行中删除标点符号。代码在这里运行Python 更正重新编译以消除句点,但为逗号添加空间,python,python-3.x,regex,text-processing,Python,Python 3.x,Regex,Text Processing,我有几行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
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
我面临的问题是,我需要句点和破折号(“.”,“-”)来代替空格,而逗号(“,”)可以代替空格。我无法获得正确的表达式语法。
例如,第2行给出了结果“MBBSBS”,当我需要它读取“MBBS”时,只需在正则表达式之前进行替换:
df['ID'] = [p.sub('',x.replace(',',' ')) for x in df['ID'].tolist()]
或者,只需使用Python字符串方法并完全跳过正则表达式:
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'] = [p.sub('',x.replace(',',' ')) for x in df['ID'].tolist()]
或者,只需使用Python字符串方法并完全跳过正则表达式:
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
你可以做:
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
我很感激这个方法,因为我从未使用过。翻译,再次感谢!我很感激这个方法,因为我从未使用过。翻译,再次感谢!感谢您提供此解决方案,尽管其他评论员提供了更有用的解决方案。我也喜欢你的方法。谢谢感谢您提供此解决方案,尽管其他评论员提供了更有用的解决方案。我也喜欢你的方法。谢谢