regex代码,如何解决一些数据输入错误



我有两个数据帧

df1
name
ADAM, HAFIZ M
ABAD, FARLEY J
CORDDED, NANCY C
BOMBSHAD, WANG D
df2
JOSEPH W. HOLUBKA   
WANG E. JONATHAN
CUCU F. LIU,
WANG C. DANA,
LANDY F. JON

我希望提取每个数据帧的名字。对于df1;名字";"之后的部分"&",第二个df,第一个名字就是我想要的。

所以返回的df是

df1
HAFIZ
FARLEY
NANCY
WANG
df2
JOSEPH
WANG
CUCU
WANG
LANDY

我当前的代码是

df['name'].str.upper().apply(lambda name:re.search(r'w+(?!.*,)',name).group())

这个regex适用于这两个df,但是,我刚刚意识到我的数据有一个输入错误。在df2中,刘和Dana有一个"最后导致regex不起作用。

错误是group((不是属性。

我有办法修复这个代码吗?regex应该同时适用于df

您可以使用

(^(?=[^,]*,?$)[w'-]+|(?<=, )[w'-]+)

请参阅regex演示。如果字符串中有尾随逗号,则此模式允许在字符串的初始位置匹配名称。

在Pandas中使用Series.str.extract矢量化方法:

df['first name'] = df['name'].str.upper().str.extract(r"(^(?=[^,]*,?$)[w'-]+|(?<=, )[w'-]+)", expand=False)

Regex详细信息

  • ^(?=[^,]*,?$)[w'-]+-字符串(^(开头的一个或多个单词、'-字符([w'-]+((如果字符串没有逗号,但可以以可选逗号((?=[^,]*,?$)(结尾(
  • |-或
  • (?<=, )[w'-]+-一个或多个单词,'-字符,前面加逗号+空格

编辑:再次尝试,因为我的第一个不完整。您可以从这个极好的答案中获取正则表达式,只需要更改一件事。如果他们的前瞻性匹配任何逗号,我们只想匹配后面跟着另一个单词的逗号。结果:

(?:(?<=^(?!.*, *w))|(?<=, ))([A-Z]+)

最新更新