generalize_names_duplcheck: 在不同名称之间进行去重的同时,规范化名称
import pandas as pd
def convert_name_format(df, last_name_col, first_name_col, separator='_'):
# Create a set to track unique names
unique_names = set()
def format_name(row):
# Extract last name and first name
last_name = row[last_name_col].strip().lower()
first_name = row[first_name_col].strip().lower()
# Create the formatted name
formatted_name = f"{last_name}{separator}{first_name[0]}"
# Check for duplicates and modify accordingly
if formatted_name in unique_names:
count = 1
# Create a new unique name
while formatted_name in unique_names:
formatted_name = f"{last_name}{separator}{first_name[0]}_{count}"
count += 1
# Add the formatted name to the set of unique names
unique_names.add(formatted_name)
return formatted_name
# Apply the format_name function to the DataFrame
df['formatted_name'] = df.apply(format_name, axis=1)
return df
# Example usage
data = {
'Last Name': ['Smith', 'Johnson', 'Smith'],
'First Name': ['John', 'Jane', 'Johnny']
}
df = pd.DataFrame(data)
result_df = convert_name_format(df, 'Last Name', 'First Name')
print(result_df)
# 通用名称重复检查
此模块提供了一个功能,用于检查名称的通用性和重复性。它特别适用于处理不同来源的数据,确保数据一致性。
## 使用示例
假设我们有一个包含各种名称的数据集,我们希望找出重名的情况并进行标准化处理。
```python
from mlxtend.text import generalize_names_duplcheck
# 示例数据
names = ['Alice', 'alice', 'ALICE', 'Bob', 'bob', 'Charlie']
# 检查重复并进行标准化
unique_names = generalize_names_duplcheck(names)
print(unique_names) # 输出去重和标准化后的名称
## 概述
**注意**,使用 [`mlxtend.text.generalize_names`](./generalize_names.md) 时,如果 `firstname_output_letters` 设置过少,可能会导致重复条目。例如,如果您的数据集中包含名字 "Adam Johnson" 和 "Andrew Johnson",默认设置(即 1 个名字字母)将会在这两种情况下产生通用名称 "johnson a"。
一种解决方案是通过将参数 `firstname_output_letters` 的值设置为大于 1 的值,来增加输出中的名字字母数量。
另一种解决方案是,如果您使用的是 pandas DataFrame,可以使用 `generalize_names_duplcheck` 函数。
默认情况下,`generalize_names_duplcheck` 将对 pandas DataFrame 列应用 `generalize_names`,使用最少数量的名字字母,并根据需要附加尽可能多的名字字母,直到给定 DataFrame 列中没有重复项为止。包含名字的示例数据集列
### 参考文献
- -
## 示例 1 - 默认设置
读取一个包含“名称”列的CSV文件,我们想要对名称进行概括化:
- 塞缪尔·埃托'o
- 亚当·约翰逊
- 安德鲁·约翰逊
```python
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)
Generalizes names and removes duplicates.
Applies mlxtend.text.generalize_names to a DataFrame with 1 first name letter by default and uses more first name letters if duplicates are detected.
Parameters
-
df
:pandas.DataFrame
DataFrame that contains a column where generalize_names should be applied.
-
col_name
:str
Name of the DataFrame column where
generalize_names
function should be applied to.
Returns
-
df_new
:str
New DataFrame object where generalize_names function has been applied without duplicates.
Examples
For usage examples, please see https://rasbt.github.io/mlxtend/user_guide/text/generalize_names_duplcheck/