使用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
相关产品推荐
相关产品推荐

