如何根据Email列的特定后缀修改对应Domain列的值?
搞定邮箱后缀匹配修改domain列的问题
嘿,我来帮你排查下代码没生效的原因,再给你个简洁靠谱的解决方案!
首先你的代码有两个关键问题:
- 访问Pandas字符串属性时,得用
str访问器,你直接写df.email.[-9:]是语法错误,正确姿势是df.email.str[-9:] - 逻辑搞反啦!你用了
!=,这会把不满足后缀条件的记录的domain改成Google,完全和你要的效果相反
正确的实现方式
推荐用Pandas的str.endswith()方法,它能直接接收一个后缀元组,一次性匹配多个目标后缀,代码简洁还不容易出错:
# 先筛选出邮箱结尾是@gmail.com或@googlemail.com的记录 target_mask = df['email'].str.endswith(('@gmail.com', '@googlemail.com')) # 把这些记录的domain列改成"Google" df.loc[target_mask, 'domain'] = 'Google'
咱们用你的示例数据测试下
import pandas as pd # 构造你给出的示例DataFrame sample_data = { 'email': ['example0@gmail.com', 'example1@site.com', 'example2@googlemail.com'], 'domain': ['', 'Site', ''] } df = pd.DataFrame(sample_data) # 执行上面的代码 target_mask = df['email'].str.endswith(('@gmail.com', '@googlemail.com')) df.loc[target_mask, 'domain'] = 'Google' print(df)
运行后输出的结果正好符合你的需求:
email domain 0 example0@gmail.com Google 1 example1@site.com Site 2 example2@googlemail.com Google
再说说你原代码的其他小问题
就算你修正了语法,还有个容易踩的坑:@gmail.com其实是10个字符,不是9个!你手动计算后缀长度很容易数错,而str.endswith()完全不用管这个,直接写完整后缀就行,省心多了~
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

