熊猫优化

时间:2014-06-24 07:20:50

标签: python numpy pandas

我写了一个用pandas处理数据的函数。使用我的函数%prun的分析日志发布在底部(仅排在前几行)。我想优化我的代码,因为我需要调用这个函数,我写了超过4000次。一次运行此功能需要37.7秒。

最耗时的部分似乎是nonzero的{​​{1}}。由于我的几乎所有操作都基于numpy.ndarray,我想知道pandas中哪个函数严重依赖于此方法?

我的操作主要包括基于pandas使用datetimeindex的数据帧切片和使用df.ix[]的数据帧合并。

我知道在没有发布我的实际脚本的情况下很难说,但是脚本太长而无法有意义且大多数操作都是临时的,因此我无法将其重写为小脚本以发布它这里。

pandas.merge()

1 个答案:

答案 0 :(得分:0)

df.ix []有点不可预测,主要是基于标签,但有一个整数位回退。您应该尝试使用.loc []。如果您只传递一个标签,它将返回该索引标签处的一系列行。您也可以通过传递范围进行切片。所以而不是:

df.ix[begin_date:end_date]

尝试:

df.loc[begin_date:end_date]

更快的是使用基于整数的切片方法.iloc []。既然你在索引上循环,你可以在你的循环中添加一个enumerate()并使用enumerate()值,即:

df.iloc[4:9]

在我的机器上.iloc的速度往往是.loc的两倍。