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

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值