[英]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() 的想法,而不是創建三列,從其中兩個中提取第一個字母,而不是用下划線再次連接所有三個,但這似乎效率低下
假設pandas ,您可以使用簡單的正則表達式,您將受益於矢量化(即快速)字符串操作:
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.