You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:14:11