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

移除DataFrame姓名列的邮箱域名,提取纯姓名/邮箱用户名

解决Pandas DataFrame中姓名列的邮箱域名及数字清理问题

问题场景

给定包含姓名/邮箱混合内容的DataFrame:

import pandas as pd

df = pd.DataFrame({'id': ['1','2','3','4','5','6','7'],
                   'name': ['Andy','Ben@gmail.com','Charlie3@ymail.com','Dean','Edgar@icloud.com','Frank','Gabriel@yahoo.com']})

需要将邮箱格式的内容保留@前的用户名(去除数字),非邮箱内容直接去除数字,最终得到纯姓名列。

原代码问题分析

你写的正则替换存在两个核心问题:

  1. 仅匹配了@后字母数字部分(比如@gmail),但域名里的.com这类带符号的部分,只会把.替换成空格,com作为字母会被保留,导致结果残留com;
  2. 替换用空格填充,会引入不必要的空白字符。

解决方案

方法1:字符串分割+正则清理(直观易懂)

直接截取@前的内容,再去掉所有数字:

import re

def clean_name(name):
    # 取@前的部分,无@则取原字符串
    username = name.split('@')[0]
    # 删除所有数字字符
    return re.sub(r'\d+', '', username)

df['name'] = df['name'].apply(clean_name)

方法2:Pandas向量化字符串操作(高效简洁)

利用Pandas内置的字符串方法,无需循环/apply,处理大数据集时效率更高:

df['name'] = df['name'].str.split('@').str[0].str.replace(r'\d+', '', regex=True)

最终结果

运行后得到目标DataFrame:

id     name
0  1     Andy
1  2      Ben
2  3  Charlie
3  4     Dean
4  5    Edgar
5  6    Frank
6  7  Gabriel

内容的提问来源于stack exchange,提问作者Arthur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:25:30