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

标签 python regex pandas string

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

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]

这会输出以下内容:

enter image description here

如您所见,这会正确删除除 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/

相关文章:

c# - 正则表达式按非字母数字字符拆分,对带有撇号缩写的单词进行特殊处理

python - 遍历 Pandas Dataframe 以根据条件进行计算

python - 如何使用 python 和 smtplib 阅读电子邮件

Python - 编写打印

python - 对象是可枚举的但不可索引?

c++ - 使用 std::regex_token_iterator(不一定)查找单词以查找字符串中的字符位置

python - 测试 DataFrame 中的后续值

regex - MATLAB 2012 正则表达式

python - 替换python中的列值

python - Pandas DataFrame 上的特定组计算