【问题标题】:Can I get Python to compare a list of nicknames with a list of full names?我可以让 Python 将昵称列表与全名列表进行比较吗?
【发布时间】:2021-10-16 04:53:17
【问题描述】:

所以首先我有一个字符数据框,它有一个名为 name 的列,其中包含 100 多人的全名。

例如,姓名:Johnathan Jay Smith、Harold Robert Doe、Katie Holt。

然后我有一个独特昵称的列表,例如,[Mr. Doe、凯蒂阿姨、约翰]

请务必注意,它们的顺序不同,并非所有有昵称的人都在全名列表中,也不是全名列表中的每个人都在昵称列表中。我将删除最后没有匹配值的行。

我的问题:有没有一种方法可以让 python 逐项阅读这两个列表,并为每个匹配的人匹配 John 和 Johnathan Jay Smith?基本上,如果昵称作为全名的一部分出现,我可以在现有的字符数据框中添加一个昵称列,而无需为超过 100 人手动执行此操作吗?

提前谢谢你,我什至不知道从哪里开始!

【问题讨论】:

标签: python list dataframe matching textmatching


【解决方案1】:

这非常简单,不考虑拼写变体

from itertools import product

names = ['Johnathan Jay Smith', 'Harold Robert Doe', 'Katie Holt']
nicknames = ["Mr. Doe", "Aunt Katie", "John"]

def match_nicknames(names, nicknames):
    splitted_names = [n.split(' ') for n in names]
    splitted_nn = [n.split(' ') for n in nicknames]
    matches = []
    for name in splitted_names:
        name_pairs = product(name, splitted_nn)
        matched = filter(lambda x: any([nn in x[0] for nn in x[1]]), name_pairs)
        if matched:
            matches += [(" ".join(name), " ".join(nn)) for name_part, nn in matched]
    return matches

match_nicknames(names, nicknames)
>> [('Johnathan Jay Smith', 'John'),
    ('Harold Robert Doe', 'Mr. Doe'),
    ('Katie Holt', 'Aunt Katie')]

【讨论】:

  • 不客气!如果这回答了您的问题,您能否将其标记为您的解决方案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多