我有两个数据框df1nameADAM, HAFIZ MABAD, FARLEY JCORDDED, NANCY CBOMBSHAD, WANG Ddf2JOSEPH W. HOLUBKA WANG E. JONATHANCUCU F. LIU,WANG C. DANA,LANDY F. JON我希望提取每个数据帧的名字。对于 df1,我需要“,”之后的“名字”部分,第二个 df,名字就是我想要的。所以返回的 df 是df1HAFIZFARLEYNANCYWANGdf2JOSEPHWANGCUCUWANGLANDY我当前的代码是 df['name'].str.upper().apply(lambda name:re.search(r'\w+(?!.*,)',name).group())这个正则表达式适用于两个 df,但是,我刚刚意识到我的数据有一个输入错误。在 df2 中,Liu 和 Dana 末尾有一个“,”,这导致正则表达式不起作用。错误是 group() 不是属性。无论如何我可以修复这个代码吗?正则表达式应该适用于 df
2 回答
沧海一幻觉
TA贡献1824条经验 获得超5个赞
您可以使用
(^(?=[^,]*,?$)[\w'-]+|(?<=, )[\w'-]+)
请参阅正则表达式演示。如果字符串中存在尾随逗号,则此模式允许在字符串中的初始位置匹配名称。
在 Pandas 中使用向Series.str.extract
量化方法:
df['first name'] = df['name'].str.upper().str.extract(r"(^(?=[^,]*,?$)[\w'-]+|(?<=, )[\w'-]+)", expand=False)
正则表达式详细信息
^(?=[^,]*,?$)[\w'-]+
'
- 一个或多个单词,如果字符串没有逗号但可以以可选逗号 ( ) 结尾,则在字符串 ( ) 开头添加-
字符[\w'-]+
( )^
(?=[^,]*,?$)
|
- 或者(?<=, )[\w'-]+
- 一个或多个单词,'
以及-
字符 字符前面带有逗号 + 空格。
牧羊人nacy
TA贡献1862条经验 获得超7个赞
再试一次,因为我的第一个不在那里。您只需要更改一件事。当它们的前瞻匹配任何逗号时,我们只想匹配后面跟着另一个单词的逗号。导致:
(?:(?<=^(?!.*, *\w))|(?<=, ))([A-Z]+)
- 2 回答
- 0 关注
- 114 浏览
添加回答
举报
0/150
提交
取消