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
相关产品推荐
相关产品推荐

