使用pd.concat合并Excel文件时为何新增空列?
解决pd.concat合并Excel出现空列的问题
可能原因
- 两个文件的列名看似相同但实际存在隐形字符(如首尾空格、换行、全角/半角差异),导致Pandas识别为不同列,合并后出现空列。
- 其中一个Excel文件包含隐藏列或空列,
pd.read_excel默认读取所有列,合并后显现出来。
排查与解决步骤
验证列名一致性
打印两个DataFrame的列名,确认是否完全匹配:file_list = glob.glob(path + "/*.xlsx") dfs = [pd.read_excel(p) for p in file_list] # 打印列名对比 print("文件1列名:", dfs[0].columns.tolist()) print("文件2列名:", dfs[1].columns.tolist()) print("列名集合是否一致:", set(dfs[0].columns) == set(dfs[1].columns))清洗列名(处理隐形字符)
如果列名存在隐形字符,用以下方法清洗后再合并:def clean_columns(df): # 去除首尾空格、换行、制表符 df.columns = df.columns.str.strip().str.replace(r'[\n\t]', '', regex=True) # 统一转为半角(如果有全角列名) df.columns = df.columns.str.normalize('NFKC') return df # 读取并清洗每个文件的列名 dfs = [clean_columns(pd.read_excel(p)) for p in file_list] # 合并 res = pd.concat(dfs, axis=0, ignore_index=True)指定读取列(避免读取空列)
如果已知目标列名,直接指定usecols参数读取,排除空列:# 替换为你的实际列名 target_cols = ['姓名', '年龄', '部门'] dfs = [pd.read_excel(p, usecols=target_cols) for p in file_list] res = pd.concat(dfs, axis=0, ignore_index=True)检查Excel源文件
打开两个Excel文件,确认:- 没有隐藏列(右键列标→取消隐藏)
- 列名完全一致(无空格、特殊字符差异)
内容的提问来源于stack exchange,提问作者joe1234
相关产品推荐
相关产品推荐

