如何将Pandas DataFrame的单个姓名列拆分为姓氏和名字两个新列
错误原因
你写的ChaperoneName[0]是提取Name这个Series(列)的第0行的完整字符串,不是对每行字符串做切片操作,所以所有行都会填充同一个固定值。pandas中要对字符串列逐元素做处理,需要使用.str字符串访问器。
实现代码
写法1:逐列赋值
# 按逗号分割,取第一部分作为姓氏 df['Surname'] = df['Name'].str.split(',', expand=True)[0] # 取逗号后面的部分,按空格分割后取索引为1的元素(跳过尊称)作为名字 df['Forename'] = df['Name'].str.split(',', expand=True)[1].str.split(expand=True)[1]
写法2:和你原有逻辑一致的assign写法
df = df.assign( Surname = df['Name'].str.split(',', expand=True)[0], Forename = df['Name'].str.split(',', expand=True)[1].str.split(expand=True)[1] )
补充说明
如果存在部分姓名没有中间名首字母的场景,以上代码依然有效,按空格分割后索引1的位置始终对应名字字段。
内容的提问来源于stack exchange,提问作者Noob3000
相关产品推荐
相关产品推荐

