我有一个大的 pandas 电子邮件地址数据框,想用“Edu”替换所有 .edu 电子邮件。我想出了一种效率很低的方法,但必须有更好的方法。我就是这样做的:
import pandas as pd
import re
inp = [{'c1':10, 'c2':'gedua.com'}, {'c1':11,'c2':'wewewe.Edu'}, {'c1':12,'c2':'wewewe.edu.ney'}]
dfn = pd.DataFrame(inp)
for index, row in dfn.iterrows():
try:
if len(re.search('\.edu', row['c2']).group(0)) > 1:
dfn.c2[index] = 'Edu'
print('Education')
except:
continue
最佳答案
使用str.contains
进行不区分大小写的选择,并使用loc
进行赋值。
dfn.loc[dfn.c2.str.contains(r'\.Edu', case=False), 'c2'] = 'Edu'
dfn
c1 c2
0 10 gedua.com
1 11 Edu
2 12 Edu
如果您只想替换结尾以 .edu
的电子邮件,则
dfn.loc[dfn.c2.str.contains(r'\.Edu$', case=False), 'c2'] = 'Edu'
或者,按照 piR 的建议,
dfn.loc[dfn.c2.str.endswith('.Edu'), 'c2'] = 'Edu'
dfn
c1 c2
0 10 gedua.com
1 11 Edu
2 12 wewewe.edu.ney
关于python - 根据正则表达式匹配替换整个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51991483/