pandas优化方法的总结

一  利用pandas进行矢量化操作

一般情况下,我们肯定不能用for 循环的方式来处理数据

再不然用df.itertuples 或 df.iterrows,来实现循环遍历,

再不然用apply()去作用与每行数据,

利用pandas操作的最好的方式还是矢量化操作,这样才能最大化的发挥pandas的优势

参考这篇文章提到的

https://blog.csdn.net/BF02jgtRS00XKtCx/article/details/90092161

二 利用numba加速

处理最好的采用矢量化的操作方式之外,在pandas的官方文档中,也介绍了如何利用numba来加速pandas处理的数据,我们知道numba是对numpy 函数 以及循环有很好的加速效果,但是对pandas默认是不支持的,pandas的官方文档给出了一个实例方法

逻辑就是把pandas中的Series转化为numpy的ndarray,然后利用函数作用于ndarray,在函数上价格jit装饰器,从而将代码直接转化为机器码,实现加速效果

参考连接

https://pandas.pydata.org/pandas-docs/stable/user_guide/enhancingperf.html?highlight=numba

参考代码

import numba


@numba.jit
def f_plain(x):
    return x * (x - 1)


@numba.jit
def integrate_f_numba(a, b, N):
    s = 0
    dx = (b - a) / N
    for i in range(N):
        s += f_plain(a + i * dx)
    return s * dx


@numba.jit
def apply_integrate_f_numba(col_a, col_b, col_N):
    n = len(col_N)
    result = np.empty(n, dtype='float64')
    assert len(col_a) == len(col_b) == n
    for i in range(n):
        result[i] = integrate_f_numba(col_a[i], col_b[i], col_N[i])
    return result


def compute_numba(df):
    result = apply_integrate_f_numba(df['a'].to_numpy(),
                                     df['b'].to_numpy(),
                                     df['N'].to_numpy())
    return pd.Series(result, index=df.index, name='result')

三 利用pandas.eval()  其实也算是个小的tip

pandas的eval函数对大型的数组有很好的加速作用

参考官方文档

https://pandas.pydata.org/pandas-docs/stable/user_guide/enhancingperf.html?highlight=numba

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章