拆分CSV文件为两份且均保留表头时第二个文件缺失表头如何修复
CSV拆分第二个文件缺失表头的修复方案
问题原因
你当前的代码存在两个核心问题导致第二个文件缺失正确表头:
- 处理非第一块数据时,
skiprows = i会跳过原文件的表头行,pandas默认会将读取到的第一行数据识别为表头,既丢失了原表头,还会损失一行有效数据 - 计算总行数时把表头行也计入统计,会导致最后一块的读取边界出现偏差,可能读出空内容
修复后的代码
import pandas as pd in_csv = 'Master_file.csv' # 提前读取原文件的表头,后续所有块统一复用 headers = pd.read_csv(in_csv, nrows=0).columns.tolist() # 单文件存放的数据行数,可按需调整 rowsize = 600000 # 计算总数据行数:原文件总行数减去表头占的1行 with open(in_csv, 'r', encoding='utf-8') as f: total_data_lines = sum(1 for _ in f) - 1 # 按块拆分,chunk_idx从1开始计数,方便命名输出文件 for chunk_idx, start_row in enumerate(range(0, total_data_lines, rowsize), start=1): if start_row == 0: # 第一块直接读取,自动识别表头 df = pd.read_csv(in_csv, nrows=rowsize) else: # 后续块跳过表头+已经读取过的所有行,关闭自动识别表头 df = pd.read_csv(in_csv, skiprows=start_row + 1, nrows=rowsize, header=None) # 手动给数据加上原表头 df.columns = headers out_csv = f'File_Number{chunk_idx}.csv' # 直接写入即可,无需追加模式,每个文件仅写入一次 df.to_csv(out_csv, index=False, header=True)
额外优化点
- 输出文件名改为按1、2、3序列命名,比用起始行号命名更直观
- 去掉了不必要的追加写入模式和chunksize参数,写入效率更高
- 提前单独读取表头,避免多次重复读取文件头的额外开销
内容的提问来源于stack exchange,提问作者Codegator
相关产品推荐
相关产品推荐

