还在抱怨Pandas运行速度慢?这几个方法会颠覆你的看法
我们来看一下功效怎样。
为了相识适才代码中产生的环境,我们必要知道.isin()要领返回的是一个布尔值数组,如下所示:
这些值标识哪些DataFrame索引(datetimes)落在指定的小时范畴内。然后,当你将这些布尔数组转达给DataFrame的.loc索引器时,你将得到一个仅包括与这些小时匹配的行的DataFrame切片。在那之后,仅仅是将切片乘以恰当的费率,这是一种快速的矢量化操纵。 这与我们上面的轮回操纵对比怎样?起首,你也许会留意到不再必要apply_tariff(),由于全部前提逻辑都应用于行的选择。因此,你必需编写的代码行和挪用的Python代码会大大镌汰。 处理赏罚时刻怎么样?比不是Pythonic的轮回快315倍,比.iterrows快71倍,比.apply快27倍。 还可以做的更好吗? 在apply_tariff_isin中,我们如故可以通过挪用df.loc和df.index.hour.isin三次来举办一些“手动事变”。假如我们有更风雅的时隙范畴,你也许会争冲突这个办理方案是不行扩展的。荣幸的是,在这种环境下,你可以行使Pandas的pd.cut() 函数以编程方法执行更多操纵:
让我们看看这里产生了什么。pd.cut() 按照每小时所属的bin应用一组标签(costs)。
这是一种完全矢量化的方法来得到我们的预期功效,它在时刻方面是最快的:
到今朝为止,时刻上根基快到达极限了,只必要耗费不到一秒的时刻来处理赏罚完备的10年的小时数据集。可是,最后一个选项是行使 NumPy 函数来操纵每个DataFrame的底层NumPy数组,然后将功效集成回Pandas数据布局中。 行使Numpy继承加快 行使Pandas时不该健忘的一点是Pandas Series和DataFrames是在NumPy库之上计划的。这为你提供了更多的计较机动性,由于Pandas可以与NumPy阵列和操纵无缝跟尾。 下面,我们将行使NumPy的 digitize() 函数。它相同于Pandas的cut(),由于数据将被分箱,但这次它将由一个索引数组暗示,这些索引暗示每小时所属的bin。然后将这些索引应用于价值数组:
与cut函数一样,这种语法很是简捷易读。但它在速率方面有何较量?让我们来看看:
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |