如何从 python 中的名称中删除字母首字母?

How to remove a letter initial from a name in python?

我有一个数据框包含一个名称列,格式如下(姓氏,名字首字母)。首字母总是在最后,只有一个字母。

如何去掉首字母?我知道 re 可能能够处理此任务,但我不确定该模式的外观。任何建议都会很棒。

import pandas as pd
d={'name':['Smith, John', 'Smith, Johnson W', 'Smith, Joan D', 'Smith, Joan X', 'Smith, Brian Borbinson] }
df=pd.DataFrame(data=d)

一种方法是测试字符串是否以首字母结尾,如果是,则删除字符串的最后两个字符。您可以将此模式用于该测试。

\s[a-zA-Z]$

\s 测试单个 space
[a-zA-Z] 测试单个字母并允许小写字母 - 如果您只需要大写字母,请使用 [A-Z]
$ 断言行尾

如果某人的名字是 Smith, J D,这当然会失败,尽管这种情况很可能是 Smith, J.D。史密斯,JD

import pandas as pd
import re

d={'name':['Smith, John', 'Smith, Johnson W',
           'Smith, Joan D', 'Smith, Joan X', 'Smith, Brian Borbinson'] }
df=pd.DataFrame(data=d)


def remove_second_name_initial(string):
    string_copy = string
    string_surname = string.split(', ')[0]
    string_name = string.split(', ')[1]
    string_first_name = string_name.split(' ')[0]
    try:
        string_second_name = string_name.split(' ')[1]
    except:
        # In case that there is not initial or second name
        return string_surname + ', ' + string_name
    if len(string_second_name) == 1:
        # Just removing the intial
        return string_surname+', '+string_first_name
    # this give back the whole name, this is to leave the complete second name
    # as in Smith, Brian Borbinson
    return string_surname+', '+string_name

df.apply(lambda x:remove_second_name_initial(x['name']) ,axis = 1)
0               Smith, John
1            Smith, Johnson
2               Smith, Joan
3               Smith, Joan
4    Smith, Brian Borbinson
dtype: object