我正在尝试删除名称字符串末尾的中间首字母。数据外观示例:
df = pd.DataFrame({'Name': ['Smith, Jake K',
'Howard, Rob',
'Smith-Howard, Emily R',
'McDonald, Jim T',
'McCormick, Erica']})
我目前正在使用以下代码,它适用于除 McCormick、Erica 之外的所有名称。我首先使用正则表达式来识别所有大写字母。然后任何具有 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 个大写字母但没有中间首字母,这会错误地删除 Erica 中的“a”。
最佳答案
你可以直接使用Series.str.replace
:
df['Name'] = df['Name'].str.replace(r'\s+[A-Z]$', '', regex=True)
输出:
0 Smith, Jake
1 Howard, Rob
2 Smith-Howard, Emily
3 McDonald, Jim
4 McCormick, Erica
Name: Name, dtype: object
见 regex demo . 正则表达式详细信息:
\s+
- 一个或多个空格[A-Z]
- 大写字母$
- 字符串结束。
关于Python从名称字符串的末尾删除中间首字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69120505/