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

如何用Python为300万行CSV文件添加1-50范围的随机值列?

给300万行CSV文件追加随机值列的正确实现

看起来你已经尝试写代码了,但有些小问题需要调整,而且针对300万行的大文件,我们还要考虑内存效率的问题。先帮你梳理下原代码里的几个问题:

  • 重复初始化了csv.writer和csv.reader实例,这纯属多余
  • print(NewDict.append(row))这行完全没必要,append()方法返回的是None,打印它没任何意义
  • 你写的row.append(row[0])是把每行第一列的值追加到末尾了,不是生成的随机数,逻辑搞错啦
  • 把300万行数据都存在NewDict列表里,这会占用大量内存,很容易导致程序因为内存不足崩溃

下面给出两种靠谱的实现方案,你可以根据自己的情况选择:


方案一:用标准库csv逐行处理(内存友好,推荐大文件)

这种方式不需要把所有数据加载到内存里,逐行读取、处理、写入,对内存的占用极低,非常适合300万行的大文件:

import csv
import random

# 打开输入文件和输出文件,newline=''是csv模块推荐的写法,避免换行符问题
with open('2019-01-1.csv', 'r') as csv_in, open('2019-01-2.csv', 'w', newline='') as csv_out:
    csv_reader = csv.reader(csv_in)
    csv_writer = csv.writer(csv_out)
    
    # 处理表头:追加新列名
    header_row = next(csv_reader)
    header_row.append('Size')
    csv_writer.writerow(header_row)
    
    # 逐行处理数据行
    for row in csv_reader:
        # 生成1到50之间的随机整数(random.randint是闭区间,包含1和50)
        random_size = random.randint(1, 50)
        # 把随机数转成字符串追加到行尾,确保CSV格式一致
        row.append(str(random_size))
        # 写入处理后的行
        csv_writer.writerow(row)

方案二:用pandas实现(代码更简洁,适合内存充足的情况)

如果你已经安装了pandas,而且机器内存足够(300万行CSV数据一般不会超过内存上限),可以用更简洁的代码实现:

常规写法(一次性读取)

import pandas as pd
import random

# 读取原CSV文件
df = pd.read_csv('2019-01-1.csv')
# 生成新列,填充1-50的随机整数
df['Size'] = [random.randint(1, 50) for _ in range(len(df))]
# 保存到新CSV,index=False避免写入额外的索引列
df.to_csv('2019-01-2.csv', index=False)

分块写法(内存紧张时用)

如果机器内存不够,可以分块读取处理,避免一次性加载所有数据:

import pandas as pd
import random

# 每次处理10万行,可根据内存情况调整
chunk_size = 100000

with open('2019-01-2.csv', 'w') as output_file:
    is_first_chunk = True
    # 分块读取原文件
    for chunk in pd.read_csv('2019-01-1.csv', chunksize=chunk_size):
        # 为当前块生成随机列
        chunk['Size'] = [random.randint(1, 50) for _ in range(len(chunk))]
        # 第一块写入表头,后续块不写
        chunk.to_csv(output_file, index=False, header=is_first_chunk)
        is_first_chunk = False

另外提一句:你原来用了numpy的randint,其实用标准库的random.randint就足够了,不需要额外引入numpy,减少依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:02:32