Python删除名称字符串末尾的中间首字母

2024-06-13 10:46:05 发布

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

我试图删除名称字符串末尾的中间首字母。数据外观的示例如下:

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]

这将产生以下结果:

enter image description here

如您所见,这正确地删除了除McCormick、Erica之外的所有姓名的中间首字母。原因是她有3个大写字母,但没有中间的首字母,这错误地删除了艾丽卡中的“a”


Tags: 数据字符串name名称df大写字母capsmith
3条回答

您可以直接使用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]-大写字母
  • $-字符串的结尾

另一个解决方案(不太好)是拆分,然后获取2个元素,然后再次连接

df['Name'] = df['Name'].str.split().str[0:2].str.join(' ')

# 0            Smith, Jake
# 1            Howard, Rob
# 2    Smith-Howard, Emily
# 3          McDonald, Jim
# 4       McCormick, Erica
# Name: Name, dtype: object

我会用这样的方法:

def removeMaj(string):
   tab=string.split(',')
   tab[1]=lower(tab[1])
   string=",".join(tab)
   return(string)

相关问题 更多 >