generalize_names_duplcheck: 泛化名称,同时防止不同名称之间出现重复

一个函数,用于将 pandas DataFrame 中的姓名转换为通用格式 <last_name><separator><firstname letter(s)> (all lowercase),同时避免重复条目。

from mlxtend.text import generalize_names_duplcheck

概述

注意:使用 mlxtend.text.generalize_names 并设置较少的 firstname_output_letters 可能会导致重复条目。例如,如果您的数据集中包含姓名 "Adam Johnson" 和 "Andrew Johnson",默认设置(即 1 个名字字母)将在这两种情况下都生成通用姓名 "johnson a"。

一种解决方案是增加输出中名字字母的数量,将参数 firstname_output_letters 设置为大于 1 的值。

另一种替代解决方案是,如果您正在使用 pandas DataFrame,则使用 generalize_names_duplcheck 函数。

默认情况下,generalize_names_duplcheck 会将 generalize_names 应用于 pandas DataFrame 列,使用最少数量的名字字母,并根据需要添加名字字母,直到给定 DataFrame 列中不再存在重复项。以下是包含以下姓名的数据集列示例:

参考文献

  • -

示例 1 - 默认值

读取包含 Name 列的 CSV 文件,我们想对该列的姓名进行泛化

  • Samuel Eto'o
  • Adam Johnson
  • Andrew Johnson
import pandas as pd
from io import StringIO

simulated_csv = "name,some_value\n"\
                "Samuel Eto'o,1\n"\
                "Adam Johnson,1\n"\
                "Andrew Johnson,1\n"

df = pd.read_csv(StringIO(simulated_csv))
df
name some_value
0 Samuel Eto'o 1
1 Adam Johnson 1
2 Andrew Johnson 1

应用 generalize_names_duplcheck 生成一个新的 DataFrame,其中包含泛化后无重复的姓名

from mlxtend.text import generalize_names_duplcheck
df_new = generalize_names_duplcheck(df=df, col_name='name')
df_new
name some_value
0 etoo s 1
1 johnson ad 1
2 johnson an 1

API

generalize_names_duplcheck(df, col_name)

泛化姓名并移除重复项。

默认情况下,将 mlxtend.text.generalize_names 应用于 DataFrame,使用 1 个名字字母;如果检测到重复项,则使用更多名字字母。

参数

  • df : pandas.DataFrame

    包含需要应用 generalize_names 的列的 DataFrame。

  • col_name : str

    需要应用 generalize_names 函数的 DataFrame 列的名称。

返回

  • df_new : pandas.DataFrame

    已应用 generalize_names 函数且无重复项的新 DataFrame 对象。

示例

有关用法示例,请参阅 https://mlxtend.cn/mlxtend/user_guide/text/generalize_names_duplcheck/