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

如何用Python生成含指定日期范围的1000万行随机数据集?

Python生成1000万行指定日期范围的随机数据集

针对1000万行的大数据量,推荐结合numpy和pandas实现,兼顾效率和内存控制,以下是具体方案:

核心思路

  1. 将指定日期范围转换为时间戳数值,用numpy生成该区间内的随机时间戳,再转回日期格式
  2. 按需生成其他随机列(整数、字符串等)
  3. 分块写入文件,避免一次性加载1000万行数据导致内存溢出

代码实现

import numpy as np
import pandas as pd
from datetime import datetime

# 配置参数
START_DATE = "2021-01-01"
END_DATE = "2021-12-31"
TOTAL_ROWS = 10_000_000
CHUNK_SIZE = 100_000  # 每次写入10万行,可根据内存调整
OUTPUT_FILE = "large_random_dataset.csv"

# 把日期转为时间戳(单位:秒)
start_ts = datetime.strptime(START_DATE, "%Y-%m-%d").timestamp()
end_ts = datetime.strptime(END_DATE, "%Y-%m-%d").timestamp()

# 分块生成并写入数据
with open(OUTPUT_FILE, "w", newline="") as f:
    # 写入表头
    header = ["date_col", "random_int", "random_str"]
    pd.DataFrame(columns=header).to_csv(f, index=False, header=True)
    
    for _ in range(TOTAL_ROWS // CHUNK_SIZE):
        # 生成随机日期列
        random_ts = np.random.uniform(start_ts, end_ts, CHUNK_SIZE)
        date_col = pd.to_datetime(random_ts, unit="s").date
        
        # 生成其他随机列
        random_int = np.random.randint(1, 1000, size=CHUNK_SIZE)
        # 生成3位随机字母字符串
        random_str = np.array([
            ''.join(np.random.choice(list('abcdefghijklmnopqrstuvwxyz'), 3))
            for _ in range(CHUNK_SIZE)
        ])
        
        # 组装数据并写入
        chunk_df = pd.DataFrame({
            "date_col": date_col,
            "random_int": random_int,
            "random_str": random_str
        })
        chunk_df.to_csv(f, index=False, header=False)
    
    # 处理剩余行数(若总行数不是CHUNK_SIZE的整数倍)
    remaining_rows = TOTAL_ROWS % CHUNK_SIZE
    if remaining_rows > 0:
        random_ts = np.random.uniform(start_ts, end_ts, remaining_rows)
        date_col = pd.to_datetime(random_ts, unit="s").date
        
        random_int = np.random.randint(1, 1000, size=remaining_rows)
        random_str = np.array([
            ''.join(np.random.choice(list('abcdefghijklmnopqrstuvwxyz'), 3))
            for _ in range(remaining_rows)
        ])
        
        chunk_df = pd.DataFrame({
            "date_col": date_col,
            "random_int": random_int,
            "random_str": random_str
        })
        chunk_df.to_csv(f, index=False, header=False)

优化说明

  • 内存控制:通过分块写入,每次仅在内存中保留10万行数据,避免内存过载
  • 日期生成效率:用numpy直接生成时间戳再转换,比循环生成单个日期快得多
  • 数据类型优化:可指定列的dtype减少内存占用,比如将random_int改为np.random.randint(1, 1000, size=CHUNK_SIZE, dtype=np.int32)

扩展调整

  • 如需更多列,直接在DataFrame中添加对应的numpy随机数组即可
  • 若要生成带具体时间的日期,去掉.date属性即可
  • 字符串列可根据需求调整规则,比如固定前缀加随机数字等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:50:38