Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Numba处理数据帧时间序列的有效方法_Python_Python 2.7_Pandas_Numba - Fatal编程技术网

Python 使用Numba处理数据帧时间序列的有效方法

Python 使用Numba处理数据帧时间序列的有效方法,python,python-2.7,pandas,numba,Python,Python 2.7,Pandas,Numba,我有一个1500000行的数据帧。这是我从QuantQuote.com买的一分钟级的股市数据。(打开、高、低、关闭、音量)。我正在尝试对股票市场交易策略进行一些自制的回溯测试。处理事务的纯python代码太慢,我想尝试使用numba来加快速度。问题是 谷歌搜索发现,令人惊讶的是,在熊猫身上使用麻木的信息非常缺乏。这让我怀疑我考虑它是否犯了错误 我的设置是Numba 0.13.0-1,Pandas 0.13.1-1。Windows 7、MS VS2013和PTV、Python 2.7、Enthou

我有一个1500000行的数据帧。这是我从QuantQuote.com买的一分钟级的股市数据。(打开、高、低、关闭、音量)。我正在尝试对股票市场交易策略进行一些自制的回溯测试。处理事务的纯python代码太慢,我想尝试使用numba来加快速度。问题是

谷歌搜索发现,令人惊讶的是,在熊猫身上使用麻木的信息非常缺乏。这让我怀疑我考虑它是否犯了错误

我的设置是Numba 0.13.0-1,Pandas 0.13.1-1。Windows 7、MS VS2013和PTV、Python 2.7、Enthoud Corporation

我现有的Python+innerloop具有以下一般结构

  • 计算“指标”列(带有pd.ewma、pd.rolling_max、pd.rolling_min等)
  • 计算预定事件的“事件”列,如移动平均线交叉、新高等
然后我使用DataFrame.iterrows来处理数据帧

我尝试过各种优化,但仍然没有我想要的那么快。而优化也会导致bug

我想用numba来处理这些行。有没有更好的方法来解决这个问题

因为我的DataFrame实际上只是一个浮动矩形,所以我考虑使用类似DataFrame.values的东西来访问数据,然后编写一系列函数,使用numba访问行。但这会删除所有的时间戳,我认为这不是一个可逆的操作。我不确定从DataFrame.values获得的值矩阵是否保证不是数据的副本


非常感谢您的帮助。

Numba是一款支持NumPy的即时编译器。可以将NumPy数组作为参数传递给Numba编译函数,但不能传递给Pandas系列

从2017年6月27日起,您唯一的选择是使用Pandas系列值,实际上是NumPy数组

此外,您还询问这些值是否“保证不是数据的副本”。它们不是副本,您可以验证:

import pandas


df = pandas.DataFrame([0, 1, 2, 3])
df.values[2] = 8
print(df)  # Should show you the value `8`
在我看来,Numba是处理市场数据的一种很好(如果不是最好的话)的方法,您只希望使用Python。如果您希望看到巨大的性能提升,请确保使用
@numba.jit(nopython=True)
(注意,这将不允许您在jit编译的函数中使用字典和其他Python类型,但会使代码运行得更快)


注意,你正在使用的这些指示器中的一些可能已经在熊猫中有高效的实现,所以考虑预先对熊猫进行计算,然后将这些值(NUMPY数组)传递给您的NUBA反向测试函数。

您应该将您的代码作为单独的问题发布,并查看这里的用户是否可以帮助您矢量化。我没有太多理由实际使用numba,因为熊猫可以在矢量化(无循环)方面做得更多。熊猫在引擎盖下使用cython,因此大多数操作都得到了优化。让你的代码正确,然后优化。要回答您的问题,您可以使用
df.values
获取基础numpy数组并进行处理(如果需要),但您将负责转换回数据帧(如果需要)。不可能以完全矢量化的方式处理数据。为了分析我的结果,我制作了非常大的PNG文件,看起来像这样。我用查科折磨自己,很快就策划了这些。如您所见,有许多列用于存储中间结果。单笔交易的处理现在是一个80行长的函数。我的策略的典型内部循环现在大约是350行不重复的python+pandas。在这种情况下很难避免错误。它因优化而膨胀。我会上传一个copy@Jeff好的,这一切看起来都是可矢量化的(通常只有循环关系不能直接矢量化,尽管有时它们是可能的,例如通过shift/diff),但我理解你的难题。你不能真的把麻木和熊猫混在一起;尝试使用df.values。好的……那么numba可能是一个不错的选择。(或者可以简单地用cython书写),请参见:关于大熊猫与numba配伍的最新信息,请参见: