我有一个数据集,我需要将名称分为first name
middle name
和last name
,我遇到的问题是,在某些情况下,人们有两个姓氏/中间名或空格创建较大的名称。这是我所拥有的示例:
name
John Smith
Jack A Doe
Jane Marie Jones Smith
字符串
我发现,做df[['firstname','middlename','middlename1','lastname']] = df['name'] .str.split(expand=True)
,然后只是结合中间名与逻辑在一起,这工程,但我有这个问题是,如果我使用的文件更新和一个像Josh Jacob Jingle Hiemer施密特的名字,那么它会抛出一个ValueError说:Columns must be same length as key.
,因为我没有容纳5个名字的人。name_parts = df['name'].str.split(expand = True)
个df['first_name'] = name_parts[0]
个df['last_name] = name_parts.iloc[:,1]
个df['middle_name'] = name_parts.iloc[:,1:-1].apply(lammba row:" ".join(row.dropna()),axis = 1)
个
当我这样做的时候,我似乎只得到了姓氏。想要的输出应该是这样的。
first_name middle_name last_name
John Smith
Jack A Doe
Jane Marie Jones Smith
Josh Jacob Jingle Hiemer Schmidt
型
任何帮助都将不胜感激。先谢谢你。
4条答案
按热度按时间sq1bmfud1#
你可以试试pattern:
字符串
输出量:
型
0qx6xfy62#
另一种方法,没有regex:
字符串
印刷品:
型
kognpnkq3#
我假设你最初的框架是这样初始化的:
字符串
其输出:
型
您可以遍历名称列表,并将每个名称拆分为一个部分列表(就像使用
name_parts = df['name'].str.split(expand = True)
一样)然后,可以使用Python列表索引和切片将列表分隔为第一个值
[0]
、最后一个值[-1]
和中间值[1:-1]
型
其最终输出:
型
如果您愿意使用
print(df.to_string(index=False)
,可以在打印时隐藏右侧的索引cuxqih214#
你可以创建自己的函数来将名字分成first,middle和last,然后使用apply调用你的函数。
字符串
输出
型