性能提升
S_o_l_o_n
logic
展开
-
python数据分析性能提升之谨慎使用Decimal类型
在用python处理数据时,尤其是金融数据,由于浮点数的不精确性(具体原因看这里),有时候为了追求精确性,我们会选择decimal标准库的Decimal数据类型来表示数值。但是要注意的是,Decimal数据类型相比于float类型,在各种计算中,会额外的消耗较多时间,特别是在处理大量的数据时,Decimal带来的性能下降是相当大的,甚至会把程序的运行时间提升一个量级。所以,在处理大量...原创 2020-04-13 16:45:58 · 1469 阅读 · 0 评论 -
numpy:性能提升之利用numpy的apply_along_axis函数替代pandas的apply函数
pandas的DataFrame的apply函数可以实现对指定的轴进行遍历操作,这是个很方便也很常用的函数,但是问题在于,当我们的数据量较大,比如有50万行,这时要对50万行进行逐行遍历的话,如果对每行的操作用到了Series索引,那么这将是一个非常耗时的过程,因为对于pandas来说,索引操作是低效的,这种低效再经过50万行放大,那么性能就会显得很差。对此,我们可以通过numpy的...原创 2019-11-15 15:50:28 · 10222 阅读 · 1 评论 -
numpy:利用np.frompyfunc函数实现元素级操作,类似pandas的applymap函数功能
在pandas里,对于DataFrame,可以利用applymap(func)函数实现对DataFrame中每个元素进行函数func操作,而且相比于for loop,其性能会有较大的提升。而对于numpy中的ndarrray,没有类似名称的函数实现相同功能,但是有一个numpy.frompyfunc函数,其可以对一个python函数进行封装,返回一个封装后的函数,然后可以利用返回的封...原创 2019-11-13 21:34:42 · 4925 阅读 · 0 评论 -
pandas性能百倍提升之用字典索引或ndarray替换DataFrame索引以及内存占用分析
在利用pandas进行数据分析时,DataFrame是其基本的数据结构,当数据量较小时还好,一旦数据量较大,比如几十万上百万时,这时DataFrame就会变得笨重,笨重主要体现在对其索引的操作上,而对DataFrame的索引操作又是基本的操作,所以这时,在性能上就会有很大的损失;对pandas的使用可以让我们可以直观简单的进行数据分析,但是往往会在性能上有较大的损失。当然,对于性能的...原创 2019-11-05 19:00:07 · 5215 阅读 · 0 评论 -
pandas性能提升之避免对小数据量使用pandas内置函数
pandas本身就是面向数据分析的,而且是面向大数据分析的,所以其内置函数本身在设计上相比于一些python原生的操作就会繁杂一些,这也是为了功能性的考虑。所以,这就导致了其内置函数就像高速火车,而python的原生操作就像超跑,超跑在速度上是具有优势的,但是在功能性上是比不上高速火车的。所以,理论上,如果可以用python的原生操作实现,那么总是可以更快的,毕竟内置函数很多也是用原...原创 2019-11-05 14:34:20 · 586 阅读 · 0 评论 -
pandas性能提升之避免直接对大DataFrame多次索引和访问
DataFrame是一个比较重量级的数据结构,当我们对一个比较大的DataFrame进行多次重复性访问时,效率是很低的。比如,如果我们需要对一个DataFrame逐行进行一个相对复杂一点的操作,尽管可以使用相对高效的apply进行逐行遍历,但是如果我们对每行的操作需要同时用到其他行时,如果是直接对DataFrame进行操作,这时就避免不了对DataFrame进行索引操作,而实际上对D...原创 2019-08-05 11:07:17 · 679 阅读 · 0 评论 -
pandas性能提升之利用chunksize参数对大数据分块处理
DataFrame是一个重量级的数据结构,当一个dataframe比较大,占据较大内存的时候,同时又需要对这个dataframe做较复杂或者复杂度非O(1)的操作时,会由于内存占用过大而导致处理速度极速下降。 对此,我们的方法是尽量避免直接对过大的dataframe直接操作(当然有时候没有办法,必须对整体的dataframe进行操作,这时就需要从其他方面优化,比如尽量...原创 2019-08-19 20:58:38 · 14596 阅读 · 3 评论 -
python数据分析性能提升之避免使用pd.Series的value_counts()
在数据分析时,当我们需要统计一个数据集中的元素的出现次数时,对于pandas中的Series对象,直接有value_counts函数,会直接返回一个以元素为索引,出现次数为值的Series,如下图所示。 问题在于,如果数据集较大,而且其中的元素也不是int或者float等简单的对象,例如是列表、元组等对象,那么利用Series的value_counts对象是非常低...原创 2019-09-27 16:54:21 · 2133 阅读 · 0 评论 -
pandas性能提升之避免SettingWithCopy
pandas中,当你用了如下赋值方式时,往往会抛出一个warning,SettingWithCopy warning。这个warning的原因在于,如果你用了如下赋值,则脚本可能会在内存里先创建一个df['a']的copy,然后再进行索引后的赋值,赋值后再将新的值赋给原df对象,这样就涉及到了两次链式赋值。至于为什么是可能会,而不是一定会,是因为这个copy的创建会由这个对象在内存位...原创 2019-05-20 21:51:45 · 474 阅读 · 0 评论 -
pandas之apply和for loop之间的比较和权衡
首先,文章开头就需要强调的是:对于大的数据量,能不用loop就尽量不用loop,无论是for loop还是apply,尽量用内置函数实现。 在pandas里,我们经常听到一句话就是尽量减少for loop的时候,尽量用apply去替代,但是这句话是有语境的,并不一定的正确的,实际上,在pandas里,对于for loop和apply之间的使用,是一个需要权衡的东西,并...原创 2019-11-05 11:29:23 · 2194 阅读 · 0 评论