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

Pandas高效处理800万行CSV:基于已有行生成新行的最优方案

高效处理800万行CSV的行扩展方案

针对你的需求——基于每行的b和c列生成b+i(i从0到c)的新行,以下是两种高效实现方案,避免Python循环的低效问题:

方案一:Python(pandas+numpy矢量化/分块处理)

利用numpy的矢量化操作和pandas的分块读取,既保证速度又解决内存不足问题:

完整内存处理(内存足够时)

import pandas as pd
import numpy as np

# 读取CSV,分隔符根据实际调整(示例为空格)
df = pd.read_csv('input.csv', sep=' ', header=0)

# 计算每行需要生成的行数:c+1(i从0到c共c+1个值)
repeats = df['c'] + 1

# 重复a、c列对应次数
a_expanded = np.repeat(df['a'].values, repeats)
c_expanded = np.repeat(df['c'].values, repeats)

# 生成扩展后的b列:每个原始b值拼接0到c的序列,再展平
b_expanded = np.concatenate([np.arange(b, b + c + 1) for b, c in zip(df['b'], df['c'])])

# 构建结果DataFrame并保存
result_df = pd.DataFrame({'a': a_expanded, 'b': b_expanded, 'c': c_expanded})
result_df.to_csv('output.csv', sep=' ', index=False)

分块处理(内存不足时)

如果800万行无法一次性加载到内存,用分块读取逐步处理:

import pandas as pd
import numpy as np

chunk_size = 100000  # 每次处理10万行,根据内存调整
output_path = 'output.csv'

with open(output_path, 'w') as f_out:
    first_write = True
    # 逐块读取输入文件
    for chunk in pd.read_csv('input.csv', sep=' ', header=0, chunksize=chunk_size):
        repeats = chunk['c'] + 1
        a_expanded = np.repeat(chunk['a'].values, repeats)
        c_expanded = np.repeat(chunk['c'].values, repeats)
        b_expanded = np.concatenate([np.arange(b, b + c + 1) for b, c in zip(chunk['b'], chunk['c'])])
        
        chunk_result = pd.DataFrame({'a': a_expanded, 'b': b_expanded, 'c': c_expanded})
        # 第一块写入表头,后续块跳过表头
        chunk_result.to_csv(f_out, sep=' ', index=False, header=first_write)
        first_write = False

方案二:awk命令行工具

awk是轻量级文本处理工具,逐行处理无需加载整个文件,内存占用极低,速度快:

编写awk脚本(expand.awk)

BEGIN {OFS=" "}  # 设置输出分隔符为空格
NR==1 {print; next}  # 打印表头后跳过
{
    # 循环生成i从0到$3(c列)的行
    for(i=0; i<=$3; i++){
        print $1, $2+i, $3
    }
}

执行命令

awk -f expand.awk input.csv > output.csv

方案选择

  • 若需后续用Python做数据处理,优先选pandas分块方案;
  • 若仅需文本转换,awk更高效、轻量,适合超大文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:54:18