如何从 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
我有一个数据框包含一个名称列,格式如下(姓氏,名字首字母)。首字母总是在最后,只有一个字母。
如何去掉首字母?我知道 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