正则表达式代码,如何解决一些数据输入错误

2024-09-30 01:22:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧

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,我需要在“,”之后加上“first name”部分,第二个df,first name就是我想要的

因此返回的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())

这个正则表达式适用于两个df,但是,我刚刚意识到我的数据有一个输入错误。在df2中,Liu和Dana在末尾有一个“,”导致正则表达式不工作

错误是group()不是属性

是否有任何方法可以修复此代码?正则表达式应该适用于两个df


Tags: 数据代码namedfgroupfirstdf1df2
2条回答

编辑:再试一次,因为我的第一个不全在那里。您可以从this excellent answer获取正则表达式,只需更改一件事。如果它们的前向匹配任何逗号,我们只想匹配后跟另一个单词的逗号。导致:

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

你可以用

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

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

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

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

正则表达式详细信息

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

相关问题 更多 >

    热门问题