使用Faker与Pandas生成性别关联模拟数据出现ValueError如何解决?
错误原因
- 你在逐行循环中直接对DataFrame整列赋值,每次传入的值长度为1,但初始化的DataFrame行数等于传入的
samples值(示例中为2),长度不匹配触发报错。 - 代码存在两处逻辑错误:生成女性名时误调用
prefix_female()方法,姓氏生成误调用first_name()方法,会得到不符合预期的结果。 - 函数传入的
cols参数无实际使用意义,属于冗余参数。
修正后代码
单元格1(导入依赖无改动)
import numpy as np import pandas as pd from faker import Faker fake = Faker() import random np.random.seed(42)
单元格2(核心逻辑修正)
def example_dataset_simulation(samples): # 按实际需要的字段初始化DataFrame df = pd.DataFrame(index=np.arange(samples), columns=['Prefix', 'Forename', 'Surname', 'Suffix']) for row in range(samples): gender = random.randint(0, 1) # 逐行对指定位置赋值,避免覆盖整列 df.loc[row, 'Prefix'] = fake.prefix_male() if gender == 0 else fake.prefix_female() # 修正女性名的调用方法 df.loc[row, 'Forename'] = fake.first_name_male() if gender == 0 else fake.first_name_female() # 修正姓氏调用方法 df.loc[row, 'Surname'] = fake.last_name() df.loc[row, 'Suffix'] = fake.suffix_male() if gender == 0 else fake.suffix_female() return df
单元格3(调用测试)
df = example_dataset_simulation(2) df
可选优化方案
如果需要生成大量样本,逐行赋值效率较低,可以使用批量生成的写法:
def example_dataset_simulation(samples): genders = np.random.randint(0, 2, size=samples) return pd.DataFrame({ 'Prefix': [fake.prefix_male() if g == 0 else fake.prefix_female() for g in genders], 'Forename': [fake.first_name_male() if g == 0 else fake.first_name_female() for g in genders], 'Surname': [fake.last_name() for _ in range(samples)], 'Suffix': [fake.suffix_male() if g == 0 else fake.suffix_female() for g in genders] })
内容的提问来源于stack exchange,提问作者StressedBoi69420
相关产品推荐
相关产品推荐

