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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:54:24