如何用Pandas替换xlsx中UniversalIDS列的重复值为唯一ID?
解决Pandas替换Excel重复UUID为唯一新ID的问题
问题根源
你之前的代码失效的核心原因是:uuid.uuid4()只会生成单个UUID值,然后把这个值批量赋值给所有重复行,导致重复行的新ID完全相同,并没有实现“唯一”的要求。
正确实现方案
需要为每一行重复值单独生成一个新的UUID,以下是两种可行的方式:
方法1:利用apply生成唯一UUID
import pandas as pd import uuid # 读取Excel文件 df = pd.read_excel('C:/Users/Nervous/Downloads/ss.xlsx') # 标记重复行(保留第一次出现的值,替换后续重复项) mask = df['UniversalIDS'].duplicated() # 对重复行的UniversalIDS列,每行生成一个新UUID df.loc[mask, 'UniversalIDS'] = df.loc[mask, 'UniversalIDS'].apply(lambda x: str(uuid.uuid4())) # 保存修改后的文件 df.to_excel("C:/Users/Nervous/Downloads/tt.xlsx", index=False) print("处理完成!")
方法2:生成对应数量的UUID列表赋值
这种方式性能更优,适合大数据量场景:
import pandas as pd import uuid df = pd.read_excel('C:/Users/Nervous/Downloads/ss.xlsx') mask = df['UniversalIDS'].duplicated() # 生成与重复行数量一致的UUID列表 new_uuids = [str(uuid.uuid4()) for _ in range(mask.sum())] # 赋值给重复行 df.loc[mask, 'UniversalIDS'] = new_uuids df.to_excel("C:/Users/Nervous/Downloads/tt.xlsx", index=False) print("处理完成!")
验证结果
可以通过以下代码检查处理后UniversalIDS列的唯一性:
print(df['UniversalIDS'].nunique() == len(df))
输出True表示所有ID都是唯一的。
内容的提问来源于stack exchange,提问作者hanan
相关产品推荐
相关产品推荐

