Python 如何将大写和标题字符串部分提取到单独的列中

Python 如何将大写和标题字符串部分提取到单独的列中,python,regex,pandas,Python,Regex,Pandas,我试图找出如何将姓名从姓氏中拆分为两个新的数据框列 姓名总是大写,而姓氏是头衔。不丢失信息 有许多堆栈溢出问题,但我不确定如何将它们用于pandas dataframe列: 例如: 数据={'Naam aanvrager':['DREGGHE Joannes','MAHIEU Leo','NIEUWENHUIJSE','COPPENS','VERBURGHT Cornelis','NUYTTENS Adriaen','DE LARUELLE Pieter','VAN VIJVER','SILBO

我试图找出如何将姓名从姓氏中拆分为两个新的数据框列

姓名总是大写,而姓氏是头衔。不丢失信息

有许多堆栈溢出问题,但我不确定如何将它们用于pandas dataframe列:

例如:

数据={'Naam aanvrager':['DREGGHE Joannes','MAHIEU Leo','NIEUWENHUIJSE','COPPENS','VERBURGHT Cornelis','NUYTTENS Adriaen','DE LARUELLE Pieter','VAN VIJVER','SILBO Martinus','Steemare Anthone'] df=pd.DataFramedata 纳姆·安夫拉格 0德雷格·乔安妮 1马修利奥酒店 2 NIEUWENHUIJSE 3个铜币 4韦伯格特科内利斯酒店 5纽顿阿德里安酒店 6德拉鲁埃勒·皮特酒店 范维弗7号 8锡尔博马丁内斯 9 STEEMAERE Anthone 想要的输出包括两个额外的列名称和姓氏:

名称 姓 德雷格 乔安妮 马修 狮子座 纽文胡伊斯 铜币 韦伯格特 科内利斯 纽顿 阿德里安 德劳雷尔 彼得 范维杰 锡尔博 马丁内斯 斯特梅尔 安托内
我将使用正则表达式来实现以下目的:

import re
regex = r"[A-Z]{2,}"
last_name = re.findall(regex, name_line) # This will return an array you need to join
last_name = ' '.join(last_name) # Remove that from your line
name_line.replace(last_name, '').strip() # Remove any trailing spaces
使用,它将提取regex模式中的多个捕获组作为新列。 该模式还可能提取额外的空白,必须使用.str.strip删除 不带strip:df.iloc[0,2]→ '德雷格 作为pd进口熊猫 示例数据帧 数据={'Naam aanvrager':['DREGGHE Joannes','MAHIEU Leo','NIEUWENHUIJSE','COPPENS','VERBURGHT Cornelis','NUYTTENS Adriaen','DE LARUELLE Pieter','VAN VIJVER','SILBO Martinus','Steemare Anthone'] df=pd.DataFramedata 摘录姓名 df['First Name','Last Name']=df['Naam aanvrager'].str.extractallr'\b[A-Z]+\b\w+*'.reset_索引[[1,0]] 提取姓氏的模式可能包含额外的空格,可以按如下方式删除 df['Last Name']=df['Last Name'].str.strip displaydf Naam aanvrager名字姓氏 Dreghe Joannes Joannes Dreghe酒店 1马修利奥利奥马修 2 NIEUWENHUIJSE南NIEUWENHUIJSE 3个铜币南铜币 4 VERBURGHT Cornelis Cornelis VERBURGHT 5纽顿阿德里安阿德里安纽顿 6德拉鲁埃勒-彼特-彼特-德拉鲁埃勒酒店 7 VAN VIJVER NaN VAN VIJVER 8锡尔博马丁内斯马丁内斯锡尔博 9干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草干草
我想你可能有连字符的名字。您可以将-添加到regex:r[A-Z\-]{2,}中,是的,不能是单个字符的姓氏:可以。谢谢!