我试图删除名称字符串末尾的中间首字母。数据外观的示例如下:
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
:输出:
见regex demo正则表达式详细信息:
\s+
-一个或多个空格[A-Z]
-大写字母$
-字符串的结尾李>另一个解决方案(不太好)是拆分,然后获取2个元素,然后再次连接
我会用这样的方法:
相关问题 更多 >
编程相关推荐