清理 Python 中数据科学的名称列表

Cleaning a list of names in Python for Data Science

所以我碰巧收到了一个 xlms 文件,其中包含具有不同头衔的个人姓名,例如先生、女士、博士、夫人、法官等。但是,其中一些姓名在一个姓名示例中包含多个头衔“Mr Mrs Ronderval ", "Dr Rev Johns Mr" 等。所以我试图删除除一个之外的所有这些,因此最终结果应该是 Ronderval 先生或 Ronderval 夫人,Johns 博士或 Rev Johns 或 Johns 先生中的任何一个都可以。到目前为止,我所做的是将字符串转换为列表列表,例如 name_list = [['Mr','Mrs', 'Ronderval'], ['Dr', 'Rev','Johns', 'Mr']] 并有一个标题列表 title=['Mr', 'Ms', 'Dr', 'Mrs', 'Judge','Rev']。所以我尝试遍历 name_list 从标题中删除所有值,结果显然是“Roderval”和“Johns”,但我希望至少有一个标题保留在 Ronderval 先生或 Ronderval 夫人、Johns 博士或约翰斯牧师或约翰斯先生。我该怎么做?

这是我使用列表理解的代码

 name_list=[[x for x in l if (x not in title )] for l in name_list] 

这对我有用:

name_list_all = [['Mr','Mrs', 'Ronderval'], ['Dr', 'Rev','Johns', 'Mr']]
title=['Mr', 'Ms', 'Dr', 'Mrs', 'Judge','Rev']
name_list=[[x for x in l if (x not in title )] for l in name_list_all]
title_list =[[x for x in l if (x  in title )] for l in name_list_all]

[x.append(y[0]) for x,y in zip(name_list,title_list)]
print(name_list)

编辑: 更正代码

您可以通过您的名单检查一次,为每个条目查找标题和名称(任何不是标题的内容)。

示例:

name_list = [['Mr','Mrs', 'Ronderval'], ['Dr', 'Rev','Johns', 'Mr']]
title_list = ['Mr', 'Ms', 'Dr', 'Mrs', 'Judge','Rev']

filtered_name_list = []

for one_entry in name_list:
    title, name = None, None

    for name_or_title in one_entry:
        if name_or_title in title_list:
            title = name_or_title
        else:
            name = name_or_title
        if title and name:
            break

    filtered_name_list.append([title, name])

print(filtered_name_list)

输出:

[['Mrs', 'Ronderval'], ['Rev', 'Johns']]

您可能想在这里尝试 set -

result = [[name.intersection(title_list).pop(), name.difference(title_list).pop()] for name in map(set,name_list)]

# output [['Mr', 'Ronderval'], ['Dr', 'Johns']]