我写了一个用pandas处理数据的函数。使用我的函数%prun
的分析日志发布在底部(仅排在前几行)。我想优化我的代码,因为我需要调用这个函数,我写了超过4000次。一次运行此功能需要37.7秒。
最耗时的部分似乎是nonzero
的{{1}}。由于我的几乎所有操作都基于numpy.ndarray
,我想知道pandas
中哪个函数严重依赖于此方法?
我的操作主要包括基于pandas
使用datetimeindex
的数据帧切片和使用df.ix[]
的数据帧合并。
我知道在没有发布我的实际脚本的情况下很难说,但是脚本太长而无法有意义且大多数操作都是临时的,因此我无法将其重写为小脚本以发布它这里。
pandas.merge()
答案 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的两倍。