【问题标题】:What is the easiest way to split a string into a first name and last name?将字符串拆分为名字和姓氏的最简单方法是什么?
【发布时间】:2020-05-19 13:47:33
【问题描述】:

数据集有 14k 行,有很多标题等。

我是 Pandas 和 Python 的初学者,我想知道如何继续从该数据集中获取名字和姓氏的输出。

数据集:

0 Pr.Doz.Dr. Klaus Semmler Facharzt für Frauenhe...

1 大学博士。 (布达佩斯)Dalia Lax

2 医学博士。约万·斯托吉尔科维奇

3 医学博士。德克施耐德

4 马克·舒尔曼

14083 袋 Kinderarztpraxis

14084 乌尔里希·布罗米格先生

14085 孙海因里希

14086 先生,博士。医学。艾玛迪斯·哈特维希

14087 茉莉莉切

【问题讨论】:

  • 数据是如何格式化的?您如何确定某物是名称还是位置/标题/连词/等?名称是手动输入的还是系统结构?
  • 是否包含中文名称?因为中文名字是以姓氏开头的。
  • 我共享的数据集有两列:索引和一列“标题”。我要清理的字符串中的“标题”。此字符串包含 - 名字、姓氏、头衔(博士、先生、女士等),诸如“/、-、;”之类的字符有些行只有名字和姓氏,但主要是噪音。不确定它是否回答了您的问题
  • 不,主要是德国人的名字,但你的观点在这里仍然有效,因为我观察到在某些行中名字和姓氏的顺序是颠倒的。
  • 好的,所以“标题”不包含任何结构?如果结构是任意的,那么您无法提取它们的名称,除非您有另一个有效名称列表。

标签: python-3.x pandas jupyter-notebook data-munging data-wrangling


【解决方案1】:
    for name in dataset:
        first = name.split()[-2]
        last = name.split()[-1]
        # save here

这适用于大多数名称,而不是所有名称。为了可重复性,您可能需要一个标题列表,例如 (dr., md., univ.) 以跳过

【讨论】:

    【解决方案2】:

    因为它不包含任何结构,所以你不走运。一个特别的解决方案可能是只写下您已识别的所有位置/标题/连接和其他噪音的列表,然后从行中删除它们。然后,如果您发现其他一些您想排除的东西,只需将它们添加到您的列表中即可。

    这不会解决某些行的名称倒序的问题。因此,它需要您手动检查所有内容并检查该行是否有效,但它可能比手动编辑每一行更快。

    一个简单的蛮力示例是:

    excludes = {'dr.', 'herr', 'budapest', 'med.', 'für', ... }
    
    new_entries = []
    
    for title in all_entries:
        cleaned_result = []
        parts = title.split(' ')
        for part in parts:
            if part.lowercase() not in excludes:
                cleaned_result.append(part)
    
        new_entries.append(' '.join(cleaned_result))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 2020-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多