如何拆分具有不同格式和分隔符的姓名列

2024-05-14 22:52:29 发布

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

我有一列不同语言的名字,输入的格式也不同。英语和汉语的名字似乎都有“,”作为分隔符。韩国人的名字有“.”作为分隔符,而日本人的名字有“,”和“/”作为分隔符。我希望能够获得新的名称列

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

我试过以下代码,但它只适用于英文和中文名称。我想我可能需要根据language列过滤行,然后拆分字符串。谢谢你的帮助

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']

Tags: namenewcolumn名字dooldfirstdf1
2条回答

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

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

相关问题 更多 >

    热门问题