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

如何用Python将首列相同、无表头的多CSV合并为Pandas DataFrame

如何在Python中合并无表头、文件名代表数据含义且首列为公共列的CSV文件

嘿,这个场景我之前处理过,刚好可以给你一套靠谱的解决方案。先明确你的核心需求:所有CSV都没有表头,文件名对应各自数据的含义,而且第一列是所有文件的公共关联列对吧?用Pandas来做这个合并是最顺手的,下面一步步给你讲清楚:

核心思路拆解

  • 遍历目标目录下的所有CSV文件
  • 读取时指定header=None,避免把数据行误当成表头
  • 利用文件名给非公共列做标识,避免合并后列名冲突
  • 以第一列(公共列)为键,逐个合并所有数据集

完整优化代码

import os
import pandas as pd
import glob

# 替换成你的CSV文件所在路径,Windows下用\\或者/,建议用原始字符串r""避免转义问题
path = r"....\data"
os.chdir(path)

# 初始化合并结果容器
combined_df = None

# 遍历目录下所有CSV文件
for csv_file in glob.glob("*.csv"):
    # 读取无表头CSV,header=None告诉Pandas不要将第一行作为表头
    df = pd.read_csv(csv_file, header=None)
    # 提取文件名(去掉.csv后缀),用来标识这部分数据的含义
    data_label = os.path.splitext(csv_file)[0]
    
    # 给列重命名:第一列保留公共列标识(默认列名0),其他列加上文件名前缀
    # 这样合并后能清楚区分每列来自哪个原始文件
    df.columns = [0] + [f"{data_label}_{col_idx}" for col_idx in df.columns[1:]]
    
    if combined_df is None:
        # 第一个文件直接作为合并的初始数据集
        combined_df = df
    else:
        # 以第一列(公共列)为键合并,默认是内连接(只保留所有文件都有的公共列值)
        # 如果需要保留所有出现过的公共列值,把how改成'outer'即可
        combined_df = combined_df.merge(df, on=0, how='inner')

# 保存合并后的CSV,index=False不保存行索引,header=None不输出表头
combined_df.to_csv('Combined.csv', index=False, header=None)

关键细节说明

  1. 列名重命名:如果不重命名,多个CSV的非公共列都会用默认的1、2、3...作为列名,合并时会出现列名冲突,加上文件名前缀后能清晰区分每列的来源。
  2. 合并方式选择:how='inner'会只保留在所有CSV中都存在的公共列值;如果需要保留所有出现过的公共列数据(哪怕某些文件里没有对应行),换成how='outer'即可。
  3. 初始容器优化:把初始的空DataFrame改成None,避免第一次合并时因为空数据集导致的异常,比原代码的写法更稳健。

注意事项

  • 确保所有CSV的第一列数据格式一致(比如都是字符串或数字),否则可能出现匹配失败的情况。
  • 如果路径包含特殊字符,记得用原始字符串(在路径前加r),避免转义字符引发错误。
  • 如果处理的CSV文件数量极多或文件很大,内存不足的话,可以考虑用Dask这类支持并行/分块处理的库,不过一般中小规模的数据集用Pandas完全足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:37:58