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

Python实现文件夹内无列名多CSV文件垂直合并及列名设置

问题原因

两个异常都是pandas默认参数和当前文件场景不匹配导致的:

  • 对角线错位拼接:每个CSV文件被pandas自动识别出的列名不统一,pd.concat做纵向拼接时默认按列名匹配对齐,列名不匹配的位置会自动填充空值,最终呈现错位效果。
  • 首行被识别为列名:pd.read_csv默认参数为header=0,会自动把读取到的第一行当作列名,而你的源文件本身没有预设表头,不仅会丢失第一行有效数据,还会进一步加剧各文件列名不一致的问题。
修改后可直接运行的代码
import pandas as pd
import os
import glob

path = r'C:\Users\avira\Desktop\CC\SAIL\Merging\CISF'
files = glob.glob(os.path.join(path, '*.csv'))

df_list = []
for file in files:
    # header=None 表示源文件无表头,不将首行识别为列名
    data = pd.read_csv(file, header=None)
    df_list.append(data)

# 一次性完成所有数据纵向拼接
combined_data = pd.concat(df_list, axis=0, ignore_index=True)

# 替换为你需要的实际列名,列数需要和CSV文件的列数完全对应
custom_columns = ['第一列列名', '第二列列名', '第三列列名']
combined_data.columns = custom_columns

# 导出结果,index=False表示不写入pandas自动生成的行索引
combined_data.to_csv(r'C:\Users\avira\Desktop\CC\SAIL\Merging\CISF\data2.csv', index=False)
关键改动说明
  • 读取CSV时新增header=None参数,强制pandas将所有行识别为数据,此时每个读入的DataFrame列名统一为从0开始的数字索引,拼接时会严格按列位置对齐,彻底解决错位问题。
  • 优化拼接逻辑:先把所有读入的DataFrame存入列表,最后一次性完成拼接,比循环内反复执行pd.concat运行效率更高,处理大量文件时性能差异尤其明显。
  • 合并完成后统一设置自定义列名,不需要逐个读取文件时单独配置。
  • 导出文件时新增index=False参数,避免pandas自动生成的行索引作为额外一列写入最终结果文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:39:17