合并单列Excel文件时数据列错位,如何修复?
问题:合并单列Excel文件时出现列错位
尝试合并多个仅含单列数据的Excel文件,但合并后数据列错位,后续文件数据依次偏移到下一列。使用的Python代码如下:
import glob import pandas as pd file_path = "c:\merge-excel" files = (file_path+"/*.xlsx") all_files = glob.glob(files) merged_data = pd.concat([pd.read_excel(a) for a in all_files]) merged_data.to_excel (file_path+"/Merged_files.xlsx", index=False, encoding='utf-8-sig')
文件示例:
- file 1.xlsx内容:
1 2 3 4 5 6 7
- file 2.xlsx内容:
8 9 10 11 12 13 14 15
- file 3.xlsx内容:
16 17 18 19 20 21 22 23
合并后异常结果:
1 | 8 | 16 2 3 4 5 6 7 9 10 11 12 13 14 15 17 18 19 20 21 22 23
修复方法
问题根源
pd.read_excel()默认会将Excel文件的第一行识别为表头(列名)。你的三个文件没有单独的表头行,第一行就是数据,导致每个文件被读取后生成了不同的列名(分别是1、8、16)。pd.concat()默认按列名对齐合并,最终就出现了多列错位的情况。
修正代码
读取Excel时指定header=None,强制将所有行作为数据内容,统一使用默认列名(0),这样合并时就会纵向拼接同一列:
import glob import pandas as pd file_path = r"c:\merge-excel" # 添加r避免路径转义字符问题 files = file_path + "/*.xlsx" all_files = glob.glob(files) # 读取时指定header=None,确保第一行不是表头 merged_data = pd.concat([pd.read_excel(a, header=None) for a in all_files], ignore_index=True) merged_data.to_excel(file_path + "/Merged_files.xlsx", index=False, encoding='utf-8-sig', header=False)
关键参数说明
header=None:告诉pandas不要将第一行作为表头,所有行都视为数据内容。ignore_index=True:合并后重置索引,避免原文件的索引重复混乱。header=False:导出时不添加默认列名(如0),保持纯数据的格式。
内容的提问来源于stack exchange,提问作者David L
相关产品推荐
相关产品推荐

