大家好,速度神库 之前介绍过不少关于pandas性能加速的起飞技巧,但这些技巧再厉害,替代整体运行速度方面也会遇到瓶颈。速度神库 本篇介绍 8 个可以替代pandas的起飞库,在加速技巧之上,替代再次打开速度瓶颈,速度神库大大提升数据处理的起飞效率。 1. Dask Dask在大于内存的替代数据集上提供多核和分布式并行执行。 在Dask中,速度神库一个DataFrame是起飞一个大型且并行的DataFrame,由许多较小的替代 pandas DataFrames组成,沿索引拆分。速度神库 这些 pandas DataFrames 可以存在于单个机器上的起飞磁盘中计算远超于内存的计算,或者存在集群中的替代很多不同机器上完成。一个 Dask DataFrame 操作会触发所有 Pandas DataFrames 的操作。 Dask-ML支持pandas、Numpy、Sklearn、XGBoost、XArray、RAPIDS等等,对于常用的亿华云计算数据处理、建模分析是完全够用的。 # 安装dask pip install dask # 导入dask dataframe 原理、使用可参考这篇:安利一个Python大数据分析神器Dask! 2. Modin Modin是一个多进程的Dataframe库,可以加速Pandas的工作流程。多进程意味着,如果在多核的计算机上查询速度就会成倍的提升。 Modin具有与pandas相同的API,使用上只需在import导入时修改一下,其余操作一模一样。 # 导入 modin pandas 原理、安装、使用可参考这篇:pandas慢怎么办?来试试Modin 3. Data Table Datatable是一个用于处理表格数据的 Python 库。 与pandas的使用上很类似,但更侧重于速度和大数据的支持。在单节点的机器上,无论是读取数据,还是云服务器提供商数据转换等操作,速度均远胜于pandas。 如果不是分布式而是单节点处理数据,遇到内存不够或者速度慢,也不妨试试这个库。 使用文档:https://datatable.readthedocs.io/en/latest/start/quick-start.html 4. Polars Polars是使用 Apache Arrow Columnar Format 作为内存模型在 Rust 中实现的速度极快的 DataFrames 库。 # 安装 polars pip install polars # 导入 polars import polars as pl 使用文档:https://pola-rs.github.io/polars-book/user-guide/index.html 5. Vaex Vaex 也是一个开源的 DataFrame,它采用内存映射、高效的核外算法和延迟计算等技术。 对于大数据集而言,只要磁盘空间可以装下数据集,使用Vaex就可以对其进行分析,解决内存不足的问题。 它的各种功能函数也都封装为类 Pandas 的 API,几乎没有学习成本。 可参考这篇文章:0.052 秒打开 100GB 数据,这个Python开源库火爆了! 6. Pyspark Pyspark 是 Apache Spark 的 Python API,通过分布式计算处理大型数据集。 # 安装 pip install pyspark # 导入 from pyspark.sql import SparkSession, functions as f spark = SparkSession.builder.appName("SimpleApp").getOrCreate() 由于spark在速度上较hadoop更有优势,源码下载现在很多企业的大数据架构都会选择使用spark。 7. Koalas Koalas 是在 Apache Spark 之上实现 的pandas DataFrame API,让数据分析更高效。 由于 Koalas 是在 Apache Spark 之上运行的,因此还必须安装 Spark。 # 安装 pip install pyspark pip install koalas # 导入 import databricks.koalas as ks from pyspark.sql import SparkSession 使用文档:https://koalas.readthedocs.io/en/latest/index.html 8. cuDF cuDF 是一个 Python GPU DataFrame 库,基于 Apache Arrow 列式内存格式构建,用于数据操作。 cuDF 提供类 pandas 的 API,因此数据分析师也是无需了解 CUDA 编程细节的。 import cudf, io, requests from io import StringIO url = "https://github.com/plotly/datasets/raw/master/tips.csv" content = requests.get(url).content.decode(utf-8) tips_df = cudf.read_csv(StringIO(content)) tips_df[tip_percentage] = tips_df[tip] / tips_df[total_bill] * 100 print(tips_df.groupby(size).tip_percentage.mean()) 使用文档:https://github.com/rapidsai/cudf 本篇介绍的 8 个Python库原理不同,使用环境也有差异,大家可以根据自己的需求进行尝试。 但这些库基本上都提供了类pandas的API,因此在使用上没有什么学习成本,只要配置好环境就可以上手操作了。