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

使用Dask合并Excel文件报错:无法合并列表类型对象的问题排查

代码错误分析与修正方案

错误原因

你遇到的报错核心是dask.compute(delayeds)的返回值类型不符合pd.concat的要求:

  • delayeds是延迟对象的列表,dask.compute接收该列表后,会返回一个包含列表的元组(格式类似([df1, df2, ...],))
  • 当你把这个元组传给pd.concat时,它会尝试合并元组内的列表对象,但pd.concat仅支持Series或DataFrame类型的可迭代对象,因此触发类型错误。

修正方案

方案1:修正compute结果的处理逻辑

有两种方式提取出正确的DataFrame集合:

  • 方式A:解包延迟对象列表给dask.compute,直接得到由DataFrame组成的元组
  • 方式B:从compute返回的元组中提取出DataFrame列表

修正后的代码示例:

import pandas as pd
import glob
import dask

files = glob.glob(r"D:\XX\XX\XX\XX\XXX\*.xlsx")

delayeds = [dask.delayed(pd.read_excel)(i, skiprows=0) for i in files]

# 方式A:解包延迟对象
results = dask.compute(*delayeds)
df = pd.concat(results, ignore_index=True)

# 方式B:提取元组中的列表
# results, = dask.compute(delayeds)
# df = pd.concat(results, ignore_index=True)

方案2:更适配场景的Dask DataFrame用法(推荐)

既然你用Dask是为了应对后续增长的文件数量,更推荐直接使用Dask DataFrame的原生API,它会自动处理多文件合并,且无需一次性将所有数据加载到内存:

import dask.dataframe as dd
import glob

files = glob.glob(r"D:\XX\XX\XX\XX\XXX\*.xlsx")

# 读取所有Excel文件并自动合并为Dask DataFrame
ddf = dd.read_excel(files, skiprows=0)

# 若需要转为Pandas DataFrame(数据量在内存可承受范围内时执行)
df = ddf.compute()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:15:38