速度起飛!替代 pandas 的八個神庫
大家好,
之前介紹過不少關于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
import dask.dataframe as dd
原理、使用可參考這篇:??安利一個Python大數據分析神器Dask??!
2. Modin
Modin是一個多進程的Dataframe庫,可以加速Pandas的工作流程。多進程意味著,如果在多核的計算機上查詢速度就會成倍的提升。
Modin具有與pandas相同的API,使用上只需在import導入時修改一下,其余操作一模一樣。
# 導入 modin pandas
import modin.pandas as pd
原理、安裝、使用可參考這篇:??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()
df = spark.read.option('header', True).csv('../input/yellow-new-yo
由于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,因此在使用上沒有什么學習成本,只要配置好環境就可以上手操作了。