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

如何用Python Pandas合并CSV时移除除首文件外的多行重复表头

解决Pandas合并CSV时保留首个文件表头、跳过其余文件7行表头的问题

Hey there! Let's get your CSV merging task sorted properly. Your current code has a few small issues that are preventing it from working as expected—let's fix them step by step.

问题分析

  1. 你在循环内部调用pd.concat(dfs),这意味着每添加一个文件就会合并一次DataFrame,既低效又可能导致数据重复。
  2. skiprows=[0]只跳过了后续文件的第一行,但你需要跳过整整7行表头。
  3. 保存最终CSV时设置header=None会把你特意保留的首个文件表头给去掉。

修正后的完整代码

import glob
import pandas as pd

# 获取当前目录下所有CSV文件(如果需要指定路径,替换成glob.glob("path/*.csv"))
filenames = glob.glob("*.csv")
print(filenames)

dfs = []
for idx, filename in enumerate(filenames):
    if idx == 0:
        # 第一个文件完整读取,保留原始表头
        df = pd.read_csv(filename)
        dfs.append(df)
    else:
        # 后续文件跳过前7行表头,直接读取数据行
        # 如果你的CSV用分号分隔,记得加上sep=";",比如pd.read_csv(filename, sep=";", skiprows=7)
        df = pd.read_csv(filename, skiprows=7)
        dfs.append(df)

# 一次性合并所有DataFrame,重置索引避免混乱
full_df = pd.concat(dfs, ignore_index=True)

# 保存合并后的文件,保留表头(默认header=True,无需额外设置)
full_df.to_csv("combined_csv.csv", index=False, encoding='utf-8-sig')

关键细节说明

  • 用enumerate(filenames)跟踪文件索引,比手动维护count_files变量更简洁直观。
  • 第一个文件正常读取,完整保留其表头结构。
  • 后续文件通过skiprows=7告诉Pandas跳过前7行表头,直接从第8行的数据行开始读取。
  • 把pd.concat(dfs)移到循环外,只执行一次合并,对6-10个文件来说效率提升明显。
  • ignore_index=True重置合并后的DataFrame索引,避免原文件的索引重复混乱。
  • 保存时不设置header=None,这样就能保留首个文件的表头,完全符合你的需求。

额外注意事项

  • 如果你的CSV文件用逗号以外的分隔符(比如你之前尝试的sep=";"),记得在两个read_csv调用里都加上这个参数,避免解析错误。
  • 确认非首个文件确实是7行表头,跳多或跳少都会导致数据和表头错位。
  • 如果需要按特定顺序合并文件,可以先对filenames排序,比如filenames = sorted(glob.glob("*.csv"))。

内容的提问来源于stack exchange,提问作者Harini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:36:32