Pandas按行替换DataFrame邮箱格式占位符的代码实现方法
Pandas 邮箱前缀批量替换实现方案
实现思路
你的三个邮箱格式列分别对应固定的前缀规则,直接通过按行应用自定义函数的方式实现即可:提取每行的firstName、lastName、Domain字段,按规则生成对应邮箱直接覆盖原列即可。如果需要兼容原列存在非规则前缀的场景,可以增加前缀校验逻辑,不匹配规则的内容保留原值。
高效实现(确定三列分别对应三个规则时使用)
该方案不需要拆分原邮箱内容,执行效率更高:
import pandas as pd # 构造示例DataFrame,你实际使用时可以替换为读取自己的数据 df = pd.DataFrame({ 'fullName': ['Olamide A.'], 'firstName': ['Olamide'], 'lastName': ['A'], 'companyName': ['Wells Fargo'], 'Domain': ['wellsfargo.com'], 'Email Format 1': ['jane.doe@wellsfargo.com'], 'Email Format 2': ['jane@wellsfargo.com'], 'Email Format 3': ['jdoe@wellsfargo.com'] }) def generate_emails(row): # 邮箱统一转小写,符合通用邮箱命名规范 first = row['firstName'].lower() last = row['lastName'].lower() domain = row['Domain'].lower() # 按规则生成三个对应格式的邮箱 return pd.Series( [f"{first}.{last}@{domain}", f"{first}@{domain}", f"{first[0]}{last}@{domain}"], index=['Email Format 1', 'Email Format 2', 'Email Format 3'] ) # 按行应用规则,直接覆盖原邮箱列 df[['Email Format 1', 'Email Format 2', 'Email Format 3']] = df.apply(generate_emails, axis=1)
通用实现(需要先校验原邮箱前缀时使用)
如果不确定三列的前缀是否符合规则,需要先匹配前缀再替换,可以用以下方案:
def replace_single_email(email, first_name, last_name, domain): original_prefix = email.split('@')[0] if original_prefix == 'jane.doe': return f"{first_name}.{last_name}@{domain}" elif original_prefix == 'jane': return f"{first_name}@{domain}" elif original_prefix == 'jdoe': return f"{first_name[0]}{last_name}@{domain}" # 不匹配规则的内容保留原值 return email def generate_emails_with_check(row): first = row['firstName'].lower() last = row['lastName'].lower() domain = row['Domain'].lower() return pd.Series( [ replace_single_email(row['Email Format 1'], first, last, domain), replace_single_email(row['Email Format 2'], first, last, domain), replace_single_email(row['Email Format 3'], first, last, domain) ], index=['Email Format 1', 'Email Format 2', 'Email Format 3'] ) df[['Email Format 1', 'Email Format 2', 'Email Format 3']] = df.apply(generate_emails_with_check, axis=1)
效果示例
示例中的行处理后,三个邮箱输出为:
- Email Format 1:
olamide.a@wellsfargo.com - Email Format 2:
olamide@wellsfargo.com - Email Format 3:
oa@wellsfargo.com
内容的提问来源于stack exchange,提问作者Som
相关产品推荐
相关产品推荐

