在数据科学领域,Python以其强大的库和灵活性而闻名。然而,当处理大规模数据集时,即使是像pandas这样的流行库也可能会显得力不从心。这时,Modin库应运而生,它是由加州大学伯克利分校的数据科学家开发的,旨在通过并行计算来加速DataFrame的操作,从而提高数据处理的效率。
Modin库的优势在于它能够利用所有的CPU核心,而不是像pandas那样仅限于单个核心。此外,Modin的集成和使用非常简单,对于初学者来说也很容易上手。目前,Modin支持pandas的API,并且正在开发自己的API。Modin的查询编译器接收来自API的输入,并将结果转换为Modin DataFrame。然而,为了支持并行操作,Modin需要Ray或Dask作为后端运行。
从系统的角度来看,数据科学家执行DataFrame操作,而Modin在后端使用Ray/Dask将操作并行分布,以加速执行。以下是使用Modin的步骤:
# 安装Modin
pip install modin[all] # 推荐安装,包含Modin所有支持的引擎。
# 导入库并初始化Ray
import pandas
import time
import modin.pandas as pd
import ray
ray.init()
# 使用下载的文件
parquet_path = 'yellow_tripdata_2022-03.parquet'
# 实际比较
start = time.time()
pandas_df = pandas.read_parquet(parquet_path)
end = time.time()
pandas_duration = end - start
print("使用pandas读取时间:{} 秒".format(round(pandas_duration, 3)))
start = time.time()
modin_df = pd.read_parquet(parquet_path)
end = time.time()
modin_duration = end - start
print("使用Modin读取时间:{} 秒".format(round(modin_duration, 3)))
print("Modin比pandas在`read_parquet`上快{}倍".format(round(pandas_duration / modin_duration, 2)))
从上述代码可以看出,Modin在读取parquet文件时比pandas快得多。这种性能提升在其他操作中也有所体现,例如isnull()、fillna()、apply()、applymap()、concat()和to_csv()等。除了merge()函数外,Modin在其他7个函数中都比pandas快。