python polars數(shù)據(jù)科學庫對比Pandas優(yōu)勢分析
python polars數(shù)據(jù)科學庫
今天給大家分享一個神奇的 python 庫,polars。
https://github.com/pola-rs/polars
大家都知道,Pandas 是數(shù)據(jù)科學中重要的 Python 庫。但它最大的缺點是對大型數(shù)據(jù)集的操作可能很慢。
Polars 是一個開源且相對較新的數(shù)據(jù)分析和處理庫,為廣泛流行的 Pandas 庫提供了替代方案。
為什么它比 Pandas 快
根據(jù) Polars 用戶指南,其目標是 “利用機器上的所有可用內核,以提供一個閃電般快速的 DataFrame 庫。”
與 Polars 相比,Pandas 本身并不跨計算機核心并行處理。而 Polars 是為并行化而設計的。
Polars 有兩種不同的 API:急切 API 和惰性 API。
急切執(zhí)行類似于 Pandas。這意味著直接運行代碼,并立即返回結果。
延遲執(zhí)行是在你需要結果之前不會運行。因此它避免了運行不必要的代碼,所以延遲執(zhí)行比急切執(zhí)行更有效。
對于延遲執(zhí)行,你必須使用 .lazy() 方法開始操作。然后你就可以為你想做的任何事情編寫代碼。
最后,你需要運行 .collect() 方法來顯示結果。
如下所示
df.lazy() .with_columns([(pl.col("col") * 10).alias("new_col")]) #... .collect()
如果不運行 .collect() 方法,該操作不會立即執(zhí)行。
安裝庫
可以直接使用 pip 進行安裝。
pip install polars
之后,你可以像導入 Pandas 一樣導入 Polars 。
import polars as pl import pandas as pd
Pandas and Polars 比較
乍一看,Pandas 和 Polars(急切 API)在語法上很相似,因為它們共享主要構建塊:Series 和 DataFrame。
此外,Polars 中的許多表達式與 Pandas 表達式類似。
# Example expressions that work both with Pandas and Polars df.head() # Get the first n rows df.tail() # Get the last n rows df.unique() # Get unique values of this expression.
下面,我們來一起探討一下 Polars 與 Pandas 在語法和執(zhí)行時間方面的主要區(qū)別。主要從以下幾個操作來進行比較。
讀取數(shù)據(jù)
選擇和過濾數(shù)據(jù)
創(chuàng)建新列
分組和聚合
讀取數(shù)據(jù)
在 Polars 中讀取 CSV 文件會感覺很熟悉,因為你可以像在 Pandas 中一樣使用 .read_csv() 方法:
# Pandas df_pd=pd.read_csv('example.csv') # Polars df_pl.read_csv('example.csv')
分別使用 Pandas 和 Polars 讀取示例數(shù)據(jù)集的執(zhí)行時間如下所示:
對于我們的示例數(shù)據(jù)集,使用 Pandas 讀取數(shù)據(jù)所需的時間大約是使用 Polars 的八倍。
選擇和過濾數(shù)據(jù)
Pandas 和 Polars 之間的第一個主要區(qū)別是 Polars 不使用索引。
盡管相同的 Pandas 代碼可以在 Polars 上運行,但這不是最佳實踐。
在 Polars 中,你應該使用 .select() 方法來選擇數(shù)據(jù)。
# Pandas df_pd[['col1', 'col2']] # The above code will run with Polars as well, # but the correct way in Polars is: df_pl.select(['col01', 'col02'])
在 Pandas 和 Polars 中選擇數(shù)據(jù)的執(zhí)行時間如下所示:
對于我們的示例數(shù)據(jù)集,使用 Pandas 選擇數(shù)據(jù)所需的時間大約是使用 Polars 的 15 倍。
雖然你可以在 Pandas 中使用 .query() 方法來過濾數(shù)據(jù),但你需要在 Polars 中使用 .filter() 方法。
# Pandas df_pd.query('col01 > 5') # Polars df_pl.filter(pl.col('col01') > 5)
在 Pandas 和 Polars 中過濾數(shù)據(jù)的執(zhí)行時間如下所示:
對于我們的示例數(shù)據(jù)集,在 Pandas 和 Polars 中過濾數(shù)據(jù)所需的時間相似。
與 Pandas 相比,Polars 可以并行運行 .select() 和 .filter() 中的操作。
創(chuàng)建新列
在 Polars 中創(chuàng)建新列的方法也與你在 Pandas 中的習慣不同。
在 Polars 中,你需要使用 .with_column() 或 .with_columns() 方法,具體取決于你要創(chuàng)建的列數(shù)。
# Pandas df_pd["new_col"] = df_pd["col01"] * 10 # Polars df_pl.with_column((pl.col("col01") * 10).alias("new_col")) # Polars for multiple columns # df_pl.with_columns([(pl.col("col01") * 10).alias("new_col"), ...])
在 Pandas 和 Polars 中創(chuàng)建新列的執(zhí)行時間如下所示:
對于我們的示例數(shù)據(jù)集,使用 Polars 創(chuàng)建新列所需的時間大約是使用 Pandas 的兩倍。
分組和聚合
Pandas 和 Polars 的分組和聚合在語法方面略有不同,但都使用 .groupby() 和 .agg() 方法。
# Pandas df_pd.groupby('col01').col02.agg('mean') # Polars df_pl.groupby('col01').agg([pl.mean('col02')])
在 Pandas 和 Polars 中對數(shù)據(jù)進行分組和聚合的最終執(zhí)行時間如下所示。
對于我們的示例數(shù)據(jù)集,使用 Pandas 聚合數(shù)據(jù)所需的時間大約是使用 Polars 的兩倍。
詳細源碼可以查看 https://www.kaggle.com/code/iamleonie/pandas-vs-polars
Polars 相對于 Pandas 的主要優(yōu)勢是速度。
如果你需要對大型數(shù)據(jù)集進行大量數(shù)據(jù)處理,那么你絕對應該嘗試 Polars。
此外,你可能還發(fā)現(xiàn),對于相同的操作,Polars 代碼通常比 Pandas 代碼長一些。
以上就是python polars數(shù)據(jù)科學庫對比Pandas優(yōu)勢分析的詳細內容,更多關于python polars數(shù)據(jù)科學庫的資料請關注腳本之家其它相關文章!
相關文章
Django?celery的替代品Dramatiq使用特性詳解
這篇文章主要為大家介紹了Django?celery的替代品Dramatiq使用特性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06Python編程django實現(xiàn)同一個ip十分鐘內只能注冊一次
這篇文章主要介紹了Python編程django實現(xiàn)同一個ip十分鐘內只能注冊一次的相關內容,具有一定參考價值。需要的朋友可以了解下。2017-11-11python?實現(xiàn)銀行卡號查詢銀行名稱和簡稱功能
這篇文章主要介紹了python?實現(xiàn)銀行卡號查詢銀行名稱和簡稱功能,本文通過實例代碼補充介紹了基于PyQT5+OpenCv實現(xiàn)銀行卡號識別功能,感興趣的朋友一起看看吧2023-11-11教你如何將 Sublime 3 打造成 Python/Django IDE開發(fā)利器
Sublime Text 是一款非常強大的文本編輯器, 下面我們介紹如何將 Sublime Text 3 打造成一款 Python/Django 開發(fā)利器:2014-07-07