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

使用Faker生成带唯一ID前缀数据集:错误修复及唯一性问询

生成唯一6位ID数据集的问题与优化方案

我尝试创建包含唯一6位ID(格式如ID123456)的数据集,最初在第8行遇到错误:

ValueError: not enough values to unpack (expected 6, got 5)

现已修复该错误及ID前缀拼接问题,当前需确保生成的ID在拟生成的1000行数据中唯一,当前使用的代码如下:

from faker import Faker
import random
import pandas as pd

Faker.seed(0)
random.seed(0)
fake = Faker("en_US") 
fixed_digits = 6
concatid = 'ID'
idcode,name, city, country, job, age = [[] for k in range(0,6)] 
for row in range(0,100):
    idcode.append(concatid + str(random.randrange(111111, 999999, fixed_digits)))
    name.append(fake.name())
    city.append(fake.city())
    country.append(fake.country())
    job.append(fake.job())
    age.append(random.randint(20,100))

d = {"ID Code":idcode, "Name":name, "Age":age, "City":city, "Country":country, "Job":job}
df = pd.DataFrame(d)
df.head()

原代码问题分析

原代码用random.randrange(111111, 999999, fixed_digits)生成ID数字部分,步长设为6会导致生成的数字是固定间隔的序列,随机选择时极易出现重复,无法保证1000行ID的唯一性。

优化方案

方案1:生成不重复随机ID

通过random.sample直接从6位数字范围内挑选1000个不重复值,再拼接前缀,确保ID唯一:

from faker import Faker
import random
import pandas as pd

Faker.seed(0)
random.seed(0)
fake = Faker("en_US") 
concatid = 'ID'

# 生成1000个不重复的6位随机数,范围包含所有6位数字
unique_numbers = random.sample(range(100000, 1000000), 1000)
idcode = [concatid + str(num) for num in unique_numbers]

# 批量生成其他字段数据
name = [fake.name() for _ in range(1000)]
city = [fake.city() for _ in range(1000)]
country = [fake.country() for _ in range(1000)]
job = [fake.job() for _ in range(1000)]
age = [random.randint(20, 100) for _ in range(1000)]

# 构建DataFrame
d = {"ID Code":idcode, "Name":name, "Age":age, "City":city, "Country":country, "Job":job}
df = pd.DataFrame(d)

# 验证唯一性(可选)
print(df["ID Code"].nunique() == 1000)  # 输出True则表示所有ID唯一

方案2:自增式ID(适合无需强随机的场景)

如果不需要完全随机的ID,自增方式更高效,且天然保证唯一:

from faker import Faker
import random
import pandas as pd

Faker.seed(0)
random.seed(0)
fake = Faker("en_US") 
concatid = 'ID'

# 生成自增6位ID,用0补全前导位确保格式统一
idcode = [concatid + f"{i:06d}" for i in range(1, 1001)]

# 批量生成其他字段数据
name = [fake.name() for _ in range(1000)]
city = [fake.city() for _ in range(1000)]
country = [fake.country() for _ in range(1000)]
job = [fake.job() for _ in range(1000)]
age = [random.randint(20, 100) for _ in range(1000)]

# 构建DataFrame
d = {"ID Code":idcode, "Name":name, "Age":age, "City":city, "Country":country, "Job":job}
df = pd.DataFrame(d)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:10:49