Python生成测试数据Faker库实战
用Faker库批量生成中文姓名、地址、手机号、公司名等假数据,配合pandas导出DataFrame和Excel,用于开发测试和演示样例。
场景痛点
写演示脚本、做PPT截图、测试清洗逻辑,总得先造一份像样的数据。手写几十行列表太费劲,用真实客户数据又有隐私问题。Faker库一行生成一个中文名、手机号、地址,批量造几千行毫无压力,直接导出Excel或SQLite。
用到的库
pip install faker pandas
完整代码
import pandas as pd
from faker import Faker
from pathlib import Path
def gen_users(n=100):
# 中文本地化,生成中文姓名、地址
fake = Faker("zh_CN")
Faker.seed(42) # 固定种子,每次运行生成一样的结果
rows = []
for _ in range(n):
rows.append({
"name": fake.name(),
"gender": fake.random_element(["男", "女"]),
"phone": fake.phone_number(),
"address": fake.address().replace("\n", " "),
"company": fake.company(),
"job": fake.job(),
"salary": fake.random_int(8000, 30000),
"join_date": fake.date_between(start_date="-3y", end_date="today"),
})
return pd.DataFrame(rows)
def gen_orders(n=500, user_count=100):
fake = Faker("zh_CN")
Faker.seed(7)
rows = []
for _ in range(n):
rows.append({
"order_id": fake.ean13(),
"cust_id": fake.random_int(1, user_count),
"amount": round(fake.pyfloat(left_digits=4, right_digits=2, positive=True), 2),
"pay_time": fake.date_time_between(start_date="-6M", end_date="now"),
"status": fake.random_element(["已支付", "已发货", "已完成", "已退款"]),
})
return pd.DataFrame(rows)
if __name__ == "__main__":
users = gen_users(100)
orders = gen_orders(500)
print("用户表:")
print(users.head())
print("\n订单表:")
print(orders.head())
# 导出Excel
out = Path("fake_data.xlsx")
with pd.ExcelWriter(out, engine="openpyxl") as writer:
users.to_excel(writer, index=False, sheet_name="users")
orders.to_excel(writer, index=False, sheet_name="orders")
print(f"\n导出:{out.resolve()}")
代码讲解
Faker("zh_CN")加载中文本地化,生成的姓名、地址、手机号都是中文格式。其他语言用en_US、ja_JP。Faker.seed(42)固定随机种子,每次运行生成相同数据,方便复现bug。- 常用方法:
fake.name()中文名、fake.phone_number()手机号、fake.address()地址、fake.company()公司名、fake.job()职位、fake.random_int(a,b)随机整数、fake.date_between()随机日期。 fake.random_element([...])从列表里随机选一个,适合枚举字段。- 生成后直接转DataFrame,想写SQLite就
df.to_sql(),见 pandas读写SQLite。
运行结果
脚本同目录生成 fake_data.xlsx,含users和orders两个sheet。控制台打印用户表前5行(中文名、手机号、公司)和订单表前5行(订单号、金额、支付时间、状态)。数据是假的,可放心用于演示和测试。
注意事项
- Faker生成的手机号、身份证号都是假格式,不要用于真实业务系统做生产数据。
- 批量生成10万行以上时,列表append比逐行DataFrame快得多,最后一次性
pd.DataFrame(rows)。 - 地址里默认带换行,
.replace("\n", " ")清理,否则Excel里一格多行。 - 要生成英文/日文数据,把
zh_CN换成对应locale即可。

更新时间:2026-09-14 20:59:55