You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas为无ID列的Excel文件生成基于姓名生日的唯一ID

基于姓名和出生日期生成唯一ID的实现方案

方法1:用Pandas内置factorize()生成整数ID

这是最直接高效的方案,适合需要连续整数ID的场景,相同的姓名+出生日期组合会得到完全一致的ID。

代码实现

import pandas as pd

# 读取Excel文件(替换为你的文件路径)
df = pd.read_excel("employee_data.xlsx")

# 统一处理缺失值:用固定占位符替换NaN,避免不同空值被判定为不同组
df["First Name"] = df["First Name"].fillna("Unknown")
df["Last Name"] = df["Last Name"].fillna("Unknown")

# 拼接三个字段作为唯一标识键
df["id_key"] = df["First Name"] + "_" + df["Last Name"] + "_" + df["Date of Birth"].astype(str)

# 生成ID:factorize会给每个唯一键分配递增整数,相同键对应相同ID
df["Idcreate"], _ = df["id_key"].factorize()
# 可选:让ID从1开始而非0
df["Idcreate"] = df["Idcreate"] + 1

# 删除临时生成的id_key列
df = df.drop("id_key", axis=1)

方法2:用hashlib生成哈希型数字ID

如果需要类似示例中的长数字ID,可通过哈希函数将组合字段转换为固定长度的数字,相同组合会生成完全一致的哈希值。

代码实现

import pandas as pd
import hashlib

def generate_hash_id(row):
    # 处理单行列的缺失值
    first_name = row["First Name"] if pd.notna(row["First Name"]) else "Unknown"
    last_name = row["Last Name"] if pd.notna(row["Last Name"]) else "Unknown"
    dob = row["Date of Birth"].astype(str) if pd.notna(row["Date of Birth"]) else "Unknown"
    
    # 拼接成唯一字符串键
    key = f"{first_name}_{last_name}_{dob}"
    # 生成MD5哈希并转为十进制整数,可通过取模限制长度
    hash_obj = hashlib.md5(key.encode('utf-8'))
    return int(hash_obj.hexdigest(), 16) % 10**8  # 生成8位数字ID

# 读取数据
df = pd.read_excel("employee_data.xlsx")

# 应用函数生成ID
df["Idcreate"] = df.apply(generate_hash_id, axis=1)

关键注意事项

  • 缺失值统一处理:必须将NaN替换为固定值(如"Unknown"),否则Pandas会将每个空值视为不同个体,导致相同信息的行生成不同ID。
  • 日期格式统一:确保两个Excel文件的出生日期格式一致,可通过pd.to_datetime()标准化:
    df["Date of Birth"] = pd.to_datetime(df["Date of Birth"], dayfirst=True).dt.strftime("%d-%m-%y")
    

内容的提问来源于stack exchange,提问作者Cogp39

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:46:07