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

Python循环拆分大DataFrame为子数据集并批量写入CSV文件

拆分大型DataFrame并批量写入CSV文件

针对你1800万行DataFrame的拆分与写入需求,直接在循环内完成CSV输出的Python实现方案如下:

方案1:基于已加载的DataFrame拆分

如果你的DataFrame已经完整加载到内存中,可以直接按固定行数切片后写入:

import pandas as pd

# 假设你的大型DataFrame变量名为df
df = pd.read_csv("your_source_data.csv")  # 替换为你的数据加载逻辑

chunk_size = 100000
total_chunks = len(df) // chunk_size + (1 if len(df) % chunk_size != 0 else 0)

for chunk_idx in range(total_chunks):
    start_row = chunk_idx * chunk_size
    end_row = min((chunk_idx + 1) * chunk_size, len(df))
    sub_df = df.iloc[start_row:end_row]
    
    # 生成有序的文件名,比如part_000.csv、part_001.csv
    output_filename = f"split_data_part_{chunk_idx:03d}.csv"
    
    # 仅第一个文件写入表头,避免重复
    sub_df.to_csv(output_filename, index=False, header=(chunk_idx == 0))
    
    print(f"已生成文件: {output_filename},包含行数: {len(sub_df)}")

方案2:内存友好型分块读取写入

如果内存不足以一次性加载1800万行数据,推荐直接从源文件分块读取并写入,无需全量加载:

import pandas as pd

chunk_size = 100000
# 按chunk_size分块读取源文件
chunk_iterator = pd.read_csv("your_source_data.csv", chunksize=chunk_size)

for chunk_idx, sub_df in enumerate(chunk_iterator):
    output_filename = f"split_data_part_{chunk_idx:03d}.csv"
    sub_df.to_csv(output_filename, index=False, header=(chunk_idx == 0))
    print(f"已生成文件: {output_filename},包含行数: {len(sub_df)}")

关键细节说明

  • chunk_size = 100000:固定每10万行一个子文件,匹配你的需求
  • 文件名用三位数序号格式化:确保文件按顺序排列,方便后续处理
  • header=(chunk_idx == 0):仅第一个CSV写入表头,避免每个文件重复出现列名
  • index=False:禁止写入DataFrame的索引列,减少冗余数据

内容的提问来源于stack exchange,提问作者Sai Deepak Chinta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:30:47