如何用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))
代码说明
- 数据读取:通过
pd.read_csv指定适配的分隔符,精准拆分姓名和邮箱列 - 邮箱拆分:使用正则正向断言
(?<=@gmail\.com),实现仅在完整邮箱结尾处分割,避免破坏邮箱结构 - 行展开:用
explode方法将邮箱列表的每个元素转为独立行 - 姓名格式调整:定位Alex对应的所有行,计算中间行索引,将非中间行的姓名字段置空
- 格式还原:通过
to_csv指定原始分隔符....,输出符合要求的文本格式
内容的提问来源于stack exchange,提问作者hoangkm
相关产品推荐
相关产品推荐

