如何使用Dask读取多个Excel文件 实现批量读取合并操作
Dask批量读取合并Excel文件解决方案
依赖准备
首先确保安装所需依赖,Dask读取Excel底层复用Pandas的接口,依赖和Pandas读取Excel一致:pip install dask pandas openpyxl
如果是处理xls格式的旧版Excel,额外安装xlrd即可:pip install xlrd
核心实现代码
和你原有的Pandas+Glob的写法逻辑高度对齐,只需要引入Dask的延迟执行包装即可:
import glob import pandas as pd import dask.dataframe as dd from dask.delayed import delayed # 匹配目标Excel文件,和原有逻辑完全一致 files = glob.glob('Working Files/*.xlsx') # 用delayed包装单文件读取操作,生成延迟执行的任务列表 delayed_dfs = [delayed(pd.read_excel)(f, skiprows=2) for f in files] # 合并所有任务为Dask DataFrame dask_df = dd.from_delayed(delayed_dfs)
后续使用说明
- 如果需要得到最终的Pandas DataFrame(数据量可以全部放进内存的场景),调用
df = dask_df.compute()即可,效果和你原有Pandas写法的输出完全一致,如果需要和ignore_index=True相同的全局连续索引,补充调用df = df.reset_index(drop=True)即可 - 如果数据量过大无法全量载入内存,不需要调用compute,直接在
dask_df上执行过滤、聚合等后续操作即可,Dask会自动分块调度执行,避免内存溢出
常见适配场景说明
- 若多个Excel的列名/列顺序不一致,可以在单文件读取的逻辑中补充列名统一的处理,示例:
delayed(pd.read_excel)(f, skiprows=2).reindex(columns=["列1","列2","列3"]) - 若需要读取Excel中指定的sheet,直接在read_excel参数中添加
sheet_name="目标sheet名"即可 - 若需要跳过异常读取的文件,可以在delayed的包装逻辑中添加异常捕获处理即可
内容的提问来源于stack exchange,提问作者Jac
相关产品推荐
相关产品推荐

