Pandas探索之高性能函數(shù)eval和query解析
Python Data Analysis Library 或 pandas 是基于NumPy 的一種工具,該工具是為了解決數(shù)據(jù)分析任務而創(chuàng)建的。Pandas 納入了大量庫和一些標準的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的工具。pandas提供了大量能使我們快速便捷地處理數(shù)據(jù)的函數(shù)和方法。你很快就會發(fā)現(xiàn),它是使Python成為強大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。
相較于 Python 的內(nèi)置函數(shù), Pandas 庫為我們提供了一系列性能更高的數(shù)據(jù)處理函數(shù),本節(jié)將向大家介紹 Pandas 庫中的高性能函數(shù) eval 與 query:
在 Python 中,我們可以用很多種的方法來實現(xiàn)同樣的目標,例如實現(xiàn)兩個數(shù)組的相加:
import numpy as np rng = np.random.RandomState(42) x = rng.rand(1E6) y = rng.rand(1E6) %timeit x + y 100 loops, best of 3: 3.39 ms per loop
利用 Numpy 中的 fromiter 函數(shù)我們可以得到相同的一維數(shù)組,然而我們發(fā)現(xiàn),這個語句的性能并不比內(nèi)置的數(shù)組加法好。
%timeit np.fromiter((xi + yi for xi, yi in zip(x, y)), dtype=x.dtype, count=len(x)) 1 loop, best of 3: 266 ms per loop
再比如,進行某一項條件的判斷:
mask = (x > 0.5) & (y < 0.5) tmp1 = (x > 0.5) tmp2 = (y < 0.5) mask = tmp1 & tmp2
Numpy 庫中的函數(shù) allclose 用于判斷兩個數(shù)組是否相等,我們可以看到,使用 numexpr 庫中的 evaluate 函數(shù)同樣可以實現(xiàn) mask 中的條件判斷。
import numexpr
mask_numexpr = numexpr.evaluate('(x > 0.5) & (y < 0.5)')
np.allclose(mask, mask_numexpr)
True
面對同樣的問題,Pandas 庫為我們提供了更高性能的解決方案, eval 函數(shù)能夠?qū)⑻囟ㄐ问降淖址D換為對應含義的邏輯判斷或運算,比 Python 的內(nèi)置函數(shù)具有更好的算法效率:
import pandas as pd
nrows, ncols = 100000, 100
rng = np.random.RandomState(42)
df1, df2, df3, df4 = (pd.DataFrame(rng.rand(nrows, ncols))
for i in range(4))
%timeit df1 + df2 + df3 + df4
10 loops, best of 3: 87.1 ms per loop
%timeit pd.eval('df1 + df2 + df3 + df4')
10 loops, best of 3: 42.2 ms per loop
np.allclose(df1 + df2 + df3 + df4,
pd.eval('df1 + df2 + df3 + df4'))
True
可以看到,eval 函數(shù)實現(xiàn)了等價的計算,并且具有更高的性能。除了加法運算,Pandas 的函數(shù) eval 還能幫助我們實現(xiàn)其他多種復雜的邏輯判斷或計算:
總結
以上就是本文關于Pandas探索之高性能函數(shù)eval和query解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Python探索之URL Dispatcher實例詳解、Python編程之Re模塊下的函數(shù)介紹等,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關文章
Jupyter Notebook中%time和%timeit的使用詳解
本文主要介紹了Jupyter Notebook中%time和%timeit的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02
python用PyInstaller打包成windows可執(zhí)行的exe(細致版)
PyInstaller的基本功能是將Python腳本打包成可執(zhí)行文件,這意味著用戶無需安裝Python環(huán)境,就能運行打包后的程序,這篇文章主要介紹了python如何用PyInstaller打包成windows可執(zhí)行exe的相關資料,需要的朋友可以參考下2025-04-04
Python使用FastParquet庫處理Parquet文件的方法
在大數(shù)據(jù)時代,數(shù)據(jù)存儲和處理的效率至關重要,Parquet作為一種列式存儲格式,因其高效的壓縮和編碼方案,成為大數(shù)據(jù)處理中的熱門選擇,本文將深入探討FastParquet庫的使用,幫助讀者掌握如何利用這一工具高效處理Parquet文件,需要的朋友可以參考下2025-02-02
Python連接Oracle數(shù)據(jù)庫的操作指南
Oracle數(shù)據(jù)庫是一種強大的企業(yè)級關系數(shù)據(jù)庫管理系統(tǒng)(RDBMS),而Python是一門流行的編程語言,兩者的結合可以提供出色的數(shù)據(jù)管理和分析能力,本教程將詳細介紹如何在Python中連接Oracle數(shù)據(jù)庫,并演示常見的數(shù)據(jù)庫任務,需要的朋友可以參考下2023-11-11

