我試圖刪除名稱字符串末尾的中間首字母。數據外觀的示例如下:
df = pd.DataFrame({'Name': ['Smith, Jake K',
'Howard, Rob',
'Smith-Howard, Emily R',
'McDonald, Jim T',
'McCormick, Erica']})
我目前正在使用以下代碼,它適用于除Erica McCormick之外的所有名稱。我首先使用正則表達式來識別所有的大寫字母。然后,對于任何包含3個或更多大寫字母的行,我從字符串中刪除[:-1](試圖刪除中間的首字母和額外的空格)。
df['Cap_Letters'] = df['Name'].str.findall(r'[A-Z]')
df.loc[df['Cap_Letters'].str.len() >= 3, 'Name'] = df['Name'].str[:-1]
這將產生以下結果:
如您所見,這正確地刪除了除McCormick、Erica之外的所有姓名的中間首字母。原因是她有3個大寫字母,但沒有中間的首字母,這錯誤地刪除了艾麗卡中的“a”。
您可以直接使用
Series.str.replace
:Output:
請參閱regex演示。正則表達式詳細信息:
\s+
-一個或多個空格[A-Z]
-大寫字母$
-字符串的結尾。