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

如何用Pandas拆分邮箱为多行并格式化姓名列显示?[Python]

用Pandas处理姓名与邮箱格式转换

需求说明

原始数据格式:

Name .... Email Address
Alex .... alex1@gmail.comalex2@gmail.comalex3@gmail.com
Peter.... peter1@gmail.com

需要实现:

  • 将Alex对应的拼接邮箱拆分为3行
  • 姓名列仅中间行显示Alex,其余行留空,最终效果:
Name .... Email Address
     .... alex1@gmail.com
Alex .... alex2@gmail.com
     .... alex3@gmail.com
Peter.... peter1@gmail.com

实现代码

import pandas as pd
import re

# 读取原始数据,以"...."作为分隔符(兼容前后可能存在的空格)
df = pd.read_csv("your_file.txt", sep="\s*\.\.\.\.\s*", engine="python", header=0)

# 拆分拼接的邮箱:利用正则正向断言,在每个@gmail.com结尾处分割字符串
df["Email Address"] = df["Email Address"].apply(lambda x: re.split(r"(?<=@gmail\.com)", x))

# 将拆分后的邮箱列表展开为单独行
df = df.explode("Email Address").reset_index(drop=True)

# 处理姓名列:仅保留Alex对应行组的中间行姓名,其余行置空
alex_rows = df[df["Name"] == "Alex"].index
if len(alex_rows) > 0:
    middle_pos = alex_rows[len(alex_rows)//2]
    df.loc[alex_rows != middle_pos, "Name"] = ""

# 按要求格式输出结果(如需保存文件可替换为to_csv指定路径)
print(df.to_csv(sep=" .... ", index=False, header=True))

代码说明

  1. 数据读取:通过pd.read_csv指定适配的分隔符,精准拆分姓名和邮箱列
  2. 邮箱拆分:使用正则正向断言(?<=@gmail\.com),实现仅在完整邮箱结尾处分割,避免破坏邮箱结构
  3. 行展开:用explode方法将邮箱列表的每个元素转为独立行
  4. 姓名格式调整:定位Alex对应的所有行,计算中间行索引,将非中间行的姓名字段置空
  5. 格式还原:通过to_csv指定原始分隔符....,输出符合要求的文本格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 01:45:03