【发布时间】:2020-06-02 05:04:18
【问题描述】:
给定一个数据框如下:
firstname lastname email_address \
0 Doug Watson douglas.watson@dignityhealth.org
1 Nick Holekamp nick.holekamp@rankenjordan.org
2 Rob Schreiner rob.schriener@wellstar.org
3 Austin Phillips austin.phillips@precmed.com
4 Elise Geiger egeiger@puracap.com
5 Paul Urick purick@diplomatpharmacy.com
6 Michael Obringer michael.obringer@lashgroup.com
7 Craig Heneghan cheneghan@west-ward.com
8 Kathy Hirst kathleen.hirst@sunovion.com
9 Stefan Bluemmers stefan.bluemmers@grunenthal.com
companyname
0 Dignity Health
1 Ranken Jordan Pediatric Bridge Hospital
2 WellStar Health System
3 Precision Medical Products, Inc.
4 puracap.com
5 Diplomat Specialty Pharmacy
6 Lash Group
7 West-Ward Pharmaceuticals
8 Sunovion Pharmaceuticals
9 Grünenthal Group
我如何使用常见的电子邮件模式创建可能的电子邮件地址,例如:firstlast@example.com, first.last@example.com, f.last@example.com, lastF@example.com, first_last@example.com, firstL@example.com 等。
df['email1'] = df.firstname.str.lower() + '.' + df.lastname.str.lower() + '@' + df.companyname.str.replace('\s+', '').str.lower() + '.com'
print(df['email1'])
输出:
0 doug.watson@dignityhealth.com
1 nick.holekamp@rankenjordanpediatricbridgehospi... --->problematic
2 rob.schreiner@wellstarhealthsystem.com
3 austin.phillips@precisionmedicalproducts,inc..com --->problematic
4 elise.geiger@puracap.com.com --->problematic
...
9995 terry.hanley@kempersportsmanagement.com
9996 christine.marks@geocomp.com
9997 darryl.rickner@doe.com
9998 lalit.sharma@lovelylifestyle.com
9999 parul.dutt@infibeam.com
其中一些似乎很成问题,任何人都可以帮助解决这个问题吗?非常感谢。
已编辑:
print(df) 应用@Sajith Herath 的解决方案后:
输出:
firstname lastname companyname \
0 Nick Holekamp Ranken ...
email
0 nick. ...
【问题讨论】:
-
您可以添加一种在将公司名称用作电子邮件域之前对其进行预处理的方法。例如,去除空格和标点符号、检查长度、检测
.com的变化、去除缩写(,inc)等 -
这似乎比我想象的要复杂。
-
你想做什么?您的数据中已经有一个电子邮件列。也许还有另一种方法可以解决您正在解决的原始问题?
-
是的,你是对的,但我被要求根据模式向用户推荐可能的电子邮件地址。
-
使用电子邮件字段中的域名就足够了吗?您可以创建
first/last的不同组合并将@domain.com附加到它。如果这不起作用,那么唯一的选择是在将公司名称用作域之前对其进行建议的预处理。
标签: python-3.x regex pandas dataframe