讲师中心 微信公众号
AI工具推荐 视频效率加速

如何用 Dask 替代 Pandas 进行高效 Excel 数据处理

冬瑶姑娘_3538

冬瑶姑娘_3538

发布时间:2026-03-30 10:40:01

|

748人浏览过

|

来源于php中文网

原创

如何用 Dask 替代 Pandas 进行高效 Excel 数据处理

本文详解如何将原有 Pandas Excel 处理流程迁移至 Dask,重点解决大文件并行读取与内存优化问题,并指出关键限制:Dask DataFrame 不支持原生 read_excel 分块,需权衡 compute() 时机以兼顾性能与可扩展性。

本文详解如何将原有 pandas excel 处理流程迁移至 dask,重点解决大文件并行读取与内存优化问题,并指出关键限制:dask dataframe 不支持原生 `read_excel` 分块,需权衡 `compute()` 时机以兼顾性能与可扩展性。

Dask 是 Python 生态中用于并行和分布式计算的重要工具,其 dask.dataframe 模块提供了与 Pandas 高度兼容的 API,适用于处理超出内存容量的大规模表格数据。但需明确一个关键前提:Dask 当前(v2024+)尚不支持对 Excel 文件(.xlsx/.xls)进行真正意义上的惰性分块读取——因为 Excel 格式本身是二进制、非流式结构,无法像 CSV 那样按行或按块分割解析。因此,dd.read_excel(...) 实际上仍会调用 pandas.read_excel 在单线程下完成全量加载,仅在返回后封装为 Dask DataFrame;若立即调用 .compute(),则等价于直接使用 Pandas,未发挥并行优势。

然而,在特定场景下,Dask 仍可带来实质性优化。例如,当 Excel 中包含多个逻辑子表(如被空行分隔的连续区域),且后续需对每个子表独立执行 groupby-apply 等计算时,可利用 Dask 的延迟执行特性对 计算阶段 进行并行化。以下是针对原始代码的重构方案与关键说明:

✅ 推荐迁移策略(平衡实用性与可扩展性)

import dask.dataframe as dd
import pandas as pd
import numpy as np

newfilename = "test.xlsx"
cols = ['A', 'B', 'C', 'D']

# Step 1: 使用 Dask 读取(注意:此处仍是单次全量加载,但返回 Dask DataFrame)
# 若文件极大,建议先导出为 Parquet(支持真正分块)再用 dd.read_parquet
df = dd.read_excel(
    "old_test.xlsx",
    header=1,
    names=cols,
    usecols=cols,
    converters={'A': int, 'B': int, 'C': int}
)

# Step 2: 切分逻辑保持不变(依赖 Pandas 的向量化判断)
# 注意:df.isnull().all(1) 在 Dask 中有效,但结果是 Dask Series,需 compute 获取索引位置
split_indices = df[df.isnull().all(axis=1)].index.compute().tolist()

# Step 3: 将切分后的各段转为 Pandas DataFrame 并并行处理(使用 list comprehension + dask.delayed 可进一步加速)
# 此处采用简洁写法,实际生产环境建议用 delayed 或 map_partitions 提升可扩展性
df_pandas = df.compute()  # ⚠️ 关键决策点:在此 compute,还是在每段内 compute?
df_list = []
for df_part in np.split(df_pandas, split_indices):
    cleaned = df_part.dropna(how='all')
    if not cleaned.empty:
        grouped = cleaned.groupby(['A', 'B', 'D'])['C'].apply(
            lambda x: ','.join(map(str, x))
        ).reset_index()
        # 保持列顺序
        grouped = grouped.reindex(columns=cols)
        df_list.append(grouped)

# Step 4: 写入 Excel(Pandas 原生支持,Dask 无替代方案)
writer = pd.ExcelWriter(newfilename, engine="xlsxwriter")
for i, part in enumerate(df_list):
    part.to_excel(writer, sheet_name=f'Sheet{i}', index=False)
writer.close()

⚠️ 重要注意事项

  • read_excel 的局限性:Dask 的 dd.read_excel 本质是 pandas.read_excel 的封装,不提供并行解析能力。对于超大 Excel 文件(>1GB),强烈建议先转换为 Parquet 格式(pd.read_excel(...).to_parquet(...)),再使用 dd.read_parquet(..., blocksize="64MB") 实现真正的分块并行读取。
  • compute() 的位置决定性能瓶颈:过早 .compute()(如示例中在读取后立刻调用)会使整个流程退化为 Pandas 单线程;若推迟到每个 groupby.apply 后再 compute(),则可能因任务图过大而降低调度效率。实践中需根据数据规模与集群资源做压测。
  • Excel 写入必须回退 Pandas:Dask DataFrame 不提供 .to_excel() 方法,所有导出操作均需通过 .compute() 转为 Pandas DataFrame 后完成。
  • 替代方案提示:若目标是纯计算加速而非内存节省,可考虑 modin.pandas(自动并行化 Pandas)或 polars(更高效列式引擎),二者对 Excel 支持也优于 Dask。

✅ 总结

Dask 并非 Pandas 的“即插即用”替代品,尤其在 Excel I/O 场景下。它的价值在于:当数据已加载至内存(或转为 Parquet)、且计算逻辑复杂(如多层 groupby、自定义 apply、跨分区 join)时,通过 map_partitions、delayed 或 client.submit 实现计算并行化。迁移时应聚焦“计算密集型环节”的重构,而非盲目替换所有 pd. 为 dd.。始终以 profiling(如 df.visualize() 查看任务图)和 benchmark 为依据,方能真正释放 Dask 的潜力。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1771

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

4624

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1749

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

27377

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3307

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3307

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1203

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

596

2023.08.10

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn