我有两个数据帧
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
编辑:再试一次,因为我的第一个不全在那里。您可以从this excellent answer获取正则表达式,只需更改一件事。如果它们的前向匹配任何逗号,我们只想匹配后跟另一个单词的逗号。导致:
你可以用
见regex demo。如果字符串中有尾随逗号,此模式允许在字符串的初始位置匹配名称
在熊猫中使用
Series.str.extract
矢量化方法:正则表达式详细信息
^(?=[^,]*,?$)[\w'-]+
-如果字符串没有逗号,但可能以可选逗号((?=[^,]*,?$)
)结尾,则字符串(^
)开头的一个或多个单词,'
和-
字符([\w'-]+
)|
-或(?<=, )[\w'-]+
-一个或多个单词,'
和-
字符前面带有逗号+空格李>相关问题 更多 >
编程相关推荐