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

批量导入Excel文件合并为DataFrame时遇异常问题求助

问题分析与解决方案

核心问题定位

  1. 表头读取错误:代码里用header=1指定从第2行(索引1)作为表头,但你明确要保留原文件表头。如果原文件表头在第1行(索引0),这会导致:
    • 把真实数据行当作表头,每个文件的列名变得混乱且不统一
    • pd.concat会保留所有不重复的列名,最终造成列数暴增(出现922列)
  2. 文件匹配验证缺失:没确认my_files是否准确抓取了所有目标文件,可能存在漏抓或误抓无关Excel文件的情况

修正后的代码

import glob
import pandas as pd
import os

path = r"C:\Users\..."

# 精准匹配目标文件名格式:filename_yyyy_mm_dd.xlsx
my_files = glob.glob(os.path.join(path, "filename_*.xlsx"))

# 先验证抓取的文件数量是否符合预期(约400个)
print(f"共抓取到 {len(my_files)} 个文件")

file_li = []

for filename in my_files:
    # 使用原文件第1行(索引0)作为表头读取
    df = pd.read_excel(filename, index_col=None, header=0)
    # 可选:过滤列数异常的文件,避免污染合并结果
    if df.shape[1] != 14:
        print(f"警告:文件 {os.path.basename(filename)} 列数异常,当前为 {df.shape[1]} 列")
        continue
    file_li.append(df)
    
# 按行合并所有数据
frame = pd.concat(file_li, axis=0, ignore_index=True)

# 验证合并结果
print(f"合并后数据行数:{frame.shape[0]},列数:{frame.shape[1]}")
frame.info()

额外优化建议

  • 内存优化读取:用生成器表达式替代列表存储,减少内存占用:
    frame = pd.concat(
        (pd.read_excel(f, header=0) for f in my_files if pd.read_excel(f, header=0).shape[1]==14),
        axis=0,
        ignore_index=True
    )
    
  • 异常文件排查:如果仍有列数问题,单独打开报错文件,检查是否存在合并单元格、空列、表头行错位等格式问题
  • 进度跟踪:添加进度条(需先安装tqdm包),方便查看处理进度:
    from tqdm import tqdm
    for filename in tqdm(my_files):
        # 读取逻辑同上
    

内容的提问来源于stack exchange,提问作者Chetan Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:40:27