你还在用Pandas处理大量数据?我发现了一个省时省事的工具:Dask
itomcoil 2025-01-04 20:23 37 浏览
Pandas不具有多处理支持,并且对于较大的数据集来说,速度非常慢。 现在有一个更好的工具可以使这些CPU内核正常工作!
在性数据分析方面,Pandas是最好的工具之一。但这并不意味着它适用于所有任务(比如说大数据处理)。在日常的工作中,我们往往要花很长时间等待Pandas读取文件或等待计算结果。
最近,我发现了一个新工具,能快速处理大量的数据,比如读取多个包含10G数据的文件,对它们应用过滤器并进行聚合。当我完成繁重的处理后,我将结果保存到一个较小的“pandas-friendly”CSV文件中,并继续在pandas中进行探索性数据分析。
本文中的例子将在Jupyter Notebook中进行演示,还没安装的同学记得先安装好。
认识Dask
Dask为数据分析提供了高级并行性,从而为你喜欢的工具提供了大规模的性能。 其中包括numpy,pandas和sklearn, Dask是开源而且免费的, 它使用现有的Python API和数据结构来简化在Dask支持的等效项之间切换。
Dask能让简单的事情变得更加容易,也能让复杂的事情变成有可能。
Pandas vs Dask
在我的日常工作中,经常需要分析一大堆文件,我来模拟一下每天的工作:创建10个包含10万个条目的文件(每个文件有196 MB)。
from sklearn.datasets import make_classification
import pandas as pd
for i in range(1, 11):
print('Generating trainset %d' % i)
x, y = make_classification(n_samples=100_000, n_features=100)
df = pd.DataFrame(data=x)
df['y'] = y
df.to_csv('trainset_%d.csv' % i, index=False)
现在,让我们用Pandas读取这些文件并估算时间,Pandas没有本地的glob支持,因此我们需要循环读取文件。
%%time
import glob
df_list = []
for filename in glob.glob('trainset_*.csv'):
df_ = pd.read_csv(filename)
df_list.append(df_)
df = pd.concat(df_list)
df.shape
Pandas花了16秒读取文件。
CPU times: user 14.6 s, sys: 1.29 s, total: 15.9 s
Wall time: 16 s
现在我们可以想象一下,如果这些文件再多100倍的话:可能连Pandas都看不懂了!
Dask可以通过将数据分成块并指定任务链来处理不适合内存的数据,我们可以估算一下Dask需要多长时间来加载这些文件。
import dask.dataframe as dd
%%time
df = dd.read_csv('trainset_*.csv')
CPU times: user 154 ms, sys: 58.6 ms, total: 212 ms
Wall time: 212 ms
Dask仅需154毫秒,用时这么短?这是因为Dask执行了延迟模式,它会在需要的时候执行计算。我们需要先定义执行图,这样Dask就可以根据任务来优化执行。我们来重复一下这个实验,Dask的read-csv函数以glob为本机函数。
%%time
df = dd.read_csv('trainset_*.csv').compute()
CPU times: user 39.5 s, sys: 5.3 s, total: 44.8 s
Wall time: 8.21 s
compute函数会强制Dask返回结果,这样Dask读取文件速度就是Pandas的两倍!
Dask能在本地对Python进行扩展。
Pandas与Dask的CPU使用率
让我们在读取文件时比较pandas和Dask之间的CPU使用情况:代码与上面相同。
上图可以看出,pandas和Dask在读取文件时在多处理方面的差异非常明显。
背后发生了什么?
Dask的数据帧由多个pandas数据帧组成,这些数据帧按索引进行拆分。当我们用Dask执行read_csv时,多个进程读取一个文件。
我们可以来可视化执行图。
exec_graph = dd.read_csv('trainset_*.csv')
exec_graph.visualize()
Dask的缺点
你可能会想,如果Dask这么牛,为什么不一起抛弃Pandas。 当然不可能那么简单,只有来自pandas的某些功能才能移植到Dask上执行。有一些很难并行化,例如排序值和在未排序的列上设置索引。 Dask不是灵丹妙药-仅在不适合主存储器的数据集上,才建议使用Dask。 由于Dask是建立在Pandas之上的,因此Pandas响应速度慢,而Dask则行动缓慢。 就像我之前提到的,Dask是数据管道过程中的有用工具,但它不能替代其他库。
建议只对不适合主内存的数据集使用Dask。
如何安装Dask?
要安装Dask,只需运行:
python -m pip install "dask[complete]"
一行代码就能安装整个Dask库。
最后
在这篇文章中只触及了Dask库的表面知识。如果你想更深入地了解Dask,应该去学习Dask教程DataFrame文档。
--END--
欢迎大家关注我们的公众号:为AI呐喊(weainahan)
找工作一定少不了项目实战经验,为了帮助更多缺少项目实战的同学入门Python,我们在头条上创建了一个专栏:《7小时快速掌握Pthon核心编程》,通过一个项目,快速掌握Python,欢迎大家点击链接或者阅读原文进行试看~
相关推荐
- MySQL修改密码_mysql怎么改密码忘了怎么办
-
拥有原来的用户名账户的密码mysqladmin-uroot-ppassword"test123"Enterpassword:【输入原来的密码】忘记原来root密码第一...
- 数据库密码配置项都不加密?心也太大了吧!
-
先看一份典型的配置文件...省略...##配置MySQL数据库连接spring.datasource.driver-class-name=com.mysql.jdbc.Driverspr...
- Linux基础知识_linux基础入门知识
-
系统目录结构/bin:命令和应用程序。/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev:dev是Device(设备)的缩写,该目录...
- MySQL密码重置_mysql密码重置教程
-
之前由于修改MySQL加密模式为mysql_native_password时操作失误,导致无法登陆MySQL数据库,后来摸索了一下,对MySQL数据库密码进行重置后顺利解决,步骤如下:1.先停止MyS...
- Mysql8忘记密码/重置密码_mysql密码忘了怎么办?
-
Mysql8忘记密码/重置密码UBUNTU下Mysql8忘记密码/重置密码步骤如下:先说下大概步骤:修改配置文件,使得用空密码可以进入mysql。然后置当前root用户为空密码。再次修改配置文件,不能...
- MySQL忘记密码怎么办?Windows环境下MySQL密码重置图文教程
-
有不少小白在使用Windows进行搭建主机的时候,安装了一些环境后,其中有MySQL设置后,然后不少马大哈忘记了MySQL的密码,导致在一些程序安装及配置的时候无法进行。这个时候怎么办呢?重置密码呗?...
- 10种常见的MySQL错误,你可中招?_mysql常见错误提示及解决方法
-
【51CTO.com快译】如果未能对MySQL8进行恰当的配置,您非但可能遇到无法顺利访问、或调用MySQL的窘境,而且还可能给真实的应用生产环境带来巨大的影响。本文列举了十种MySQL...
- Mysql解压版安装过程_mysql解压版安装步骤
-
Mysql是目前软件开发中使用最多的关系型数据库,具体安装步骤如下:第一步:Mysql官网下载最新版(mysql解压版(mysql-5.7.17-winx64)),Mysql官方下载地址为:https...
- MySQL Root密码重置指南:Windows新手友好教程
-
如果你忘记了MySQLroot密码,请按照以下简单步骤进行重置。你需要准备的工具:已安装的MySQL以管理员身份访问命令提示符一点复制粘贴的能力分步操作指南1.创建密码重置文件以管理员...
- 安卓手机基于python3搜索引擎_python调用安卓so库
-
环境:安卓手机手机品牌:vivox9s4G运行内存手机软件:utermux环境安装:1.java环境的安装2.redis环境的安装aptinstallredis3.elasticsearch环...
- Python 包管理 3 - poetry_python community包
-
Poetry是一款现代化的Python依赖管理和打包工具。它通过一个pyproject.toml文件来统一管理你的项目依赖、配置和元数据,并用一个poetry.lock文件来锁定所有依赖的精...
- Python web在线服务生产环境真实部署方案,可直接用
-
各位志同道合的朋友大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题最近经...
- 官方玩梗:Python 3.14(πthon)稳定版发布,正式支持自由线程
-
IT之家10月7日消息,当地时间10月7日,Python软件基金会宣布Python3.14.0正式发布,也就是用户期待已久的圆周率(约3.14)版本,再加上谐音梗可戏称为π...
- 第一篇:如何使用 uv 创建 Python 虚拟环境
-
想象一下,你有一个使用Python3.10的后端应用程序,系统全局安装了a2.1、b2.2和c2.3这些包。一切运行正常,直到你开始一个新项目,它也使用Python3.10,但需要...
- 我用 Python 写了个自动整理下载目录的工具
-
经常用电脑的一定会遇到这种情况:每天我们都在从浏览器、微信、钉钉里下各种文件,什么截图、合同、安装包、临时文档,全都堆在下载文件夹里。起初还想着“过两天再整理”,结果一放就是好几年。结果某天想找一个发...
- 一周热门
- 最近发表
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)