我试着把Pandas的全名分为中间名和姓,但我在rep上卡住了

2024-09-27 00:17:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图把名字分成两部分,保留名字姓氏,最后替换所有名字中的公共部分,这样名字就必须是姓氏,如果中间名保持不变,它就会被添加到列中

df['owner1_first_name'] = df['owner1_name'].str.split().str[0].astype(str, 
errors='ignore')
df['owner1_last_name'] = 
df['owner1_name'].str.split().str[-1].str.replace(df['owner1_first_name'], 
"").astype(str, errors='ignore')
['owner1_middle_name'] = 
df['owner1_name'].str.replace(df['owner1_first_name'], 
"").str.replace(df['owner1_last_name'], "").astype(str, errors='ignore')

问题是我不能使用 .结构更换(df['owner1_name'],“”)
因为我遇到了一个错误 TypeError:“Series”对象是可变的,因此不能对它们进行哈希运算

在熊猫身上有什么替代品可以替代我正在努力实现的目标吗

我想要的输出是

全名=THOMAS MARY D,在owner1\u name列中

我想要

^{pr2}$

Tags: namemiddledf名字结构replacefirstsplit
3条回答
splitted = df['Contact_Name'].str.split()
df['First_Name'] = splitted.str[0]
df['Last_Name'] = splitted.str[-1]
df['Middle_Name'] = df['Contact_Name'].loc[df['Contact_Name'].str.split().str.len() == 3].str.split(expand=True)[1]

这可能有帮助!这里的部分是正确地插入中间名,你可以用这个代码来做。。在

我认为您需要^{}将两列中的if相同值替换为空字符串:

df = pd.DataFrame({'owner1_name':['THOMAS MARY D', 'JOE Long', 'MARY Small']})

splitted = df['owner1_name'].str.split()
df['owner1_first_name'] = splitted.str[0]
df['owner1_last_name'] = splitted.str[-1]
df['owner1_middle_name'] = splitted.str[1]
df['owner1_middle_name'] = df['owner1_middle_name']
                             .mask(df['owner1_middle_name'] == df['owner1_last_name'], '')
print (df)
     owner1_name owner1_first_name owner1_last_name owner1_middle_name
0  THOMAS MARY D            THOMAS                D               MARY
1       JOE Long               JOE             Long                   
2     MARY Small              MARY            Small  

什么是相同的:

^{pr2}$

编辑:

对于replace,可以使用^{}和{}:

df = pd.DataFrame({'owner1_name':['THOMAS MARY-THOMAS', 'JOE LongJOE', 'MARY Small']})

splitted = df['owner1_name'].str.split()
df['a'] = splitted.str[0]
df['b'] = splitted.str[-1]

df['c'] = df.apply(lambda x: x['b'].replace(x['a'], ''), axis=1)
print (df)
          owner1_name       a            b      c
0  THOMAS MARY-THOMAS  THOMAS  MARY-THOMAS  MARY-
1         JOE LongJOE     JOE      LongJOE   Long
2          MARY Small    MARY        Small  Small

在三行代码中实现我想要的问题是

df['owner1_first_name'] = df['owner1_name'].str.split().str[0]
df['owner1_last_name'] = df.apply(lambda x: x['owner1_name'].split()
[-1].replace(x['owner1_first_name'], ''), axis=1)
df['owner1_middle_name'] = df.apply(lambda x: 
x['owner1_name'].replace(x['owner1_first_name'], 
'').replace(x['owner1_last_name'], ''), axis=1)

只需更改赋值并使用另一个变量:

split = df['owner1_name'].split()
df['owner1_first_name'] = split[0]
df['owner1_middle_name'] = split[-1]
df['owner1_last_name'] = split[1]

相关问题 更多 >

    热门问题