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
相关产品推荐
相关产品推荐

