Pandas合并多个CSV文件追加写入时表头重复问题
问题根源
代码在遍历每个数据分块写入输出文件时,都固定传入了自定义表头参数,导致每写入一个分块就会插入一次表头,最终出现多段重复表头的问题。另外表头列表定义在循环内部,也会产生不必要的重复计算。
修正方案
核心逻辑是仅在第一次写入输出文件时写入一次自定义表头,后续所有分块写入时关闭表头输出,具体调整点:
- 把自定义表头列表移到循环外,避免重复创建
- 新增表头写入标记,第一次写入时使用覆盖模式+自定义表头,后续所有写入使用追加模式+关闭表头
- 写入前先清理已存在的同名输出文件,避免历史残留数据干扰结果
修正后完整代码
import pandas as pd import os file1 = 'https://public.fyers.in/sym_details/NSE_CM.csv' file2 = 'https://public.fyers.in/sym_details/NSE_FO.csv' file3 = 'https://public.fyers.in/sym_details/BSE_CM.csv' CHUNK_SIZE = 10 ** 6 csv_file_list = [file1, file2, file3] output_file = "/content/output.csv" # 统一表头定义在循环外层 headerList = [ "fytoken", "symbol", "instrumentType", "lotSize", "tickSize", "ISIN", "tradingSession", "lastUpdate", "expiryDate", "symbolTicker", "exchange", "segment", "scripCode", "scripName", "scripToken", "strikePrice", "optionType" ] # 清理已存在的旧输出文件 if os.path.exists(output_file): os.remove(output_file) # 表头写入标记,初始为未写入 is_header_written = False for csv_file_name in csv_file_list: skipRows = [2022, 92805] chunk_container = pd.read_csv( csv_file_name, chunksize=CHUNK_SIZE, skiprows=skipRows ) for chunk in chunk_container: if not is_header_written: # 首次写入带表头,使用覆盖模式 chunk.to_csv(output_file, header=headerList, mode="w", index=False) is_header_written = True else: # 后续写入不带表头,使用追加模式 chunk.to_csv(output_file, header=False, mode="a", index=False)
注意事项
- 当前代码中
skiprows=[2022,92805]对三个源文件全局生效,如果这两个需要跳过的行号仅属于某一个源文件,建议按文件单独配置跳过规则,避免误删其他文件的有效数据 - 分块读写的方式内存占用稳定,适合处理GB级别的大CSV文件,不会出现内存溢出问题
内容的提问来源于stack exchange,提问作者Siddharth Mankar
相关产品推荐
相关产品推荐

