簡體   English   中英

如何將姓氏,名字和第二個名字變成首字母?

[英]How to turn last name, name and second name into initials?

我有一個帶有姓氏、名字和第二個名字的數據框:

name
Johnson John William
Peterson Andrew James
Burnham Edward Alexander
....

我想創建新列“首字母”,它將只采用姓氏並添加下划線的名字和名字的首字母:

name                         initials
Johnson John William        Johnson_J_W
Peterson Andrew James       Peterson_A_J
Burnham Edward Alexander    Burnham_E_A
....

我怎么能在短時間內做到這一點? 我有使用 split() 的想法,而不是創建三列,從其中兩個中提取第一個字母,而不是用下划線再次連接所有三個,但這似乎效率低下

假設 ,您可以使用簡單的正則表達式,您將受益於矢量化(即快速)字符串操作:

df['initials'] = df['name'].str.replace(r'\s+([A-Z])[a-z]+', r'_\1', regex=True)

如果情況無關緊要:

df['initials'] = df['name'].str.replace(r'\s(\w)\w+', r'_\1', regex=True)

輸出:

                       name      initials
0      Johnson John William   Johnson_J_W
1     Peterson Andrew James  Peterson_A_J
2  Burnham Edward Alexander   Burnham_E_A

我會使用 pandas 的apply方法,傳遞一個函數( to_initials )來處理數據框的'name'列中的每個條目。

def to_initials(x):
    last, first, second = x.split(" ")
    return last+"_"+first[0]+"_"+second[0]

df = pd.DataFrame({"name":["Johnson John William","Peterson Andrew James","Burnham Edward Alexander"]})

df["initials"] = df["name"].apply(to_initials)

或者可以使用 python 的 lambda 函數並在一行中完成。

df["initials"] = df["name"].apply(lambda x: x.split(" ")[0]+"_"+x.split(" ")[1][0]+"_"+x.split(" ")[2][0])

如果只有一個名稱的條目,您將不得不擴展此功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM