如何使用格式不同且分隔符不同的名称拆分列

我有一列名称,它们使用不同的语言,并以不同的格式输入。似乎英文和中文名称以“,”作为分隔符。朝鲜语名称带有“。”作为分隔符,而日语名称同时具有“,”和“ /”作为分隔符。希望能够获得New_Name列

Name_old                                 Language              New_Name
Phillipe,Mr Johnson                     English               Mr Johnson Phillipe           

李,Mr 永                                 Mandarin              Mr 永 李

김두한.Kim Do Han                         Korean                Kim Do Han

Amori,Shinji/ あもりさせる / 由紀         Japanese              Shinji Amori

我尝试了以下代码,但仅适用于英文和中文名称。我想我可能必须根据语言列过滤行,然后进行字符串拆分。感谢任何形式的帮助,谢谢。

splitname = df1["Name_old"].str.split(",",n = 1,expand = True)  

# create first name column based on values after comma in Name_old column  
df1["First_Name"]= splitname[1]  

# create first name column based on values before comma in Name_old column 
df1["Last_Name"]= splitname[0]

#concatenate the first name and last name
df1['New_Name'] = df1['First_Name'] +' '+ df1['Last_Name']
lzdfkwdz 回答:如何使用格式不同且分隔符不同的名称拆分列

一种方法是根据您的np.select使用Language的条件:

d = {"Name":["Phillipe,Mr Johnson","李,Mr 永","김두한.Kim Do Han","Amori,Shinji/ あもりさせる / 由紀"],"Language":["English","Mandarin","Korean","Japanese"]}

df = pd.DataFrame(d)

df["new"] = np.select([df["Language"].isin(["English","Mandarin"]),df["Language"].eq("Korean")],[df["Name"].str.split(",",n = 1).str[::-1].str.join(" "),df["Name"].str.findall(r"[A-Za-z]+").str.join(" ")],df["Name"].str.findall(r"[A-Za-z]+").str[::-1].str.join(" "))

print (df)

#
                         Name  Language                   new
0        Phillipe,Mr Johnson   English   Mr Johnson Phillipe
1                     李,Mr 永  Mandarin                Mr 永 李
2              김두한.Kim Do Han    Korean            Kim Do Han
3  Amori,Shinji/ あもりさせる / 由紀  Japanese          Shinji Amori
,

您可以使用正则表达式拆分字符串:

import re

test_str = 'a,b.c/d,e,f.g/hij.k'

print(re.split(r'[,\/.]',test_str))

r'[,\/.]'表示三个字符串中的任何一个:,/. 输出为:

['a','b','c','d','e','f','g','hij','k']

完整示例:

import re
import pandas as pd

test_str = 'abc,def'

df = pd.DataFrame({"old_name": [test_str]})

def split_name(name):
    split_name = re.split(r'[,test_str)
    return split_name[0],split_name[1]

df['first_name'],df['last_name'] = zip(*df['old_name'].apply(split_name))

print(df)

输出:

  old_name first_name last_name
0  abc,def        abc       def
本文链接:https://www.f2er.com/3076864.html

大家都在问