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

Python合并Excel文件并写入文件名至列报错:无对象可拼接求助

问题:合并指定目录Excel文件并插入文件名失败,报错"No objects to concatenate"

我正在用Python合并指定目录下的Excel文件,同时把文件名插入到Excel列中,但功能无法正常运行,运行后报错:

raise ValueError("No objects to concatenate")
ValueError: No objects to concatenate

我的实现代码如下:

import os
import pandas as pd
import numpy as np

dir_path = 'D:/Test Merge'

files = [a for a in os.listdir(dir_path) if a.endswith('.xlsx')]

sheetname = 'CAPEX (2)'
dfs = []

for file in files:
    file_path = os.path.join(dir_path,file)
    try:
        df = pd.read_excel(file_path,sheet_name=sheetname)
        df['filename'] = os.path.basename()
        dfs.append(df)
    except Exception as a:
        print("Not Found")
merged_df = pd.concat(dfs)

merged_df.to_excel(os.path.join('D:/Test Merge','merge_data.xlsx'), index=False)

问题分析与修复

报错的核心原因是dfs列表为空,没有任何DataFrame可以合并,导致pd.concat()抛出异常。具体问题出在这几个地方:

  1. os.path.basename()参数缺失
    这个方法必须传入文件路径参数才能返回文件名,你的代码里没传值,会直接触发异常,导致每次循环都进入except块,dfs始终没有添加任何数据。

  2. 异常捕获信息太模糊
    只打印"Not Found"无法定位具体错误(比如是sheet不存在,还是文件读取失败,还是其他问题),不利于排查。

  3. 可选优化:兼容更多Excel格式
    只筛选.xlsx会漏掉.xlsm等其他Excel格式文件,如果需要可以调整后缀判断。

修正后的代码

import os
import pandas as pd

dir_path = 'D:/Test Merge'

# 兼容xlsx和xlsm格式,可根据需要调整
files = [f for f in os.listdir(dir_path) if f.endswith(('.xlsx', '.xlsm'))]

sheetname = 'CAPEX (2)'
dfs = []

for file in files:
    file_path = os.path.join(dir_path, file)
    try:
        df = pd.read_excel(file_path, sheet_name=sheetname)
        # 直接用循环变量file获取文件名,简单高效
        df['filename'] = file
        dfs.append(df)
        print(f"成功读取文件: {file}")
    except Exception as e:
        # 打印具体错误信息,方便快速排查问题
        print(f"处理文件 {file} 时出错: {str(e)}")

if dfs:
    merged_df = pd.concat(dfs)
    output_path = os.path.join(dir_path, 'merge_data.xlsx')
    merged_df.to_excel(output_path, index=False)
    print(f"合并完成,结果已保存至: {output_path}")
else:
    print("没有成功读取任何文件,无法执行合并操作")

关键修改说明

  • 修复文件名获取问题:直接使用循环变量file就能得到文件名,不需要调用os.path.basename()(如果需要带路径的文件名,也可以用os.path.basename(file_path))。
  • 增强异常排查能力:打印出错的文件名和具体错误内容,快速定位问题(比如某个文件的sheet名不对、文件损坏等)。
  • 添加空列表判断:避免pd.concat()在dfs为空时抛出异常,提前给出明确提示。
  • 兼容更多Excel格式:如果有.xlsm格式的文件也能被读取,可根据实际需求调整后缀规则。

内容的提问来源于stack exchange,提问作者Eki Triyatno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:40:00