Python TA-Lib不使用pandas系列

时间:2014-01-31 11:54:41

标签: python numpy

我试图在Ubuntu 12.04上使用python中的TA-Lib作为described in the official documentation。但是,当使用pandas DataFrameSeries时,如不同来源的多个示例所示,我得到以下TypeError

  

Traceback(最近一次调用最后一次):文件“test1.py”,第14行,in          analysis ['rsi'] = ta.RSI(spy.Close)TypeError:参数'real'的类型不正确(预期numpy.ndarray,得到系列)

执行时,例如这段代码:

import pandas.io.data as data
import pandas as pd
import talib as ta
import matplotlib.pyplot as plt

# Download SP500 data with pandas
spyidx = data.get_data_yahoo('SPY', '2013-01-01')
analysis = pd.DataFrame(index = spyidx.index)
analysis['rsi'] = ta.RSI(spyidx.Close)

出了什么问题?

4 个答案:

答案 0 :(得分:5)

对于pandas> = 0.13.0:

  

将系列直接传递给期望ndarray的cython函数   类型将不会直接工作,您必须传递Series.values

因此,在TA-lib修改其API以适应较新的pandas版本之前,您需要使用Series.valuesDataFrame.values

答案 1 :(得分:2)

首先,您需要使用抽象函数:

import talib.abstract as ta

而不是

import talib as ta

其次要确保使用正确的名称:

ta_serie = pd.DataFrame({
    'high': _1_minute_tf.max_price,
    'open': _1_minute_tf.open_price,
    'close': _1_minute_tf.close_price,
    'low': _1_minute_tf.min_price
})

最后,享受:ta.SAR(ta_serie, window)会给你你所期望的。

答案 2 :(得分:1)

尝试

analysis = pd.DataFrame(index = spyidx.index.values)

答案 3 :(得分:1)

如错误消息所示,TA-lib需要numpy.ndarray,但spyidx.Close是Pandas系列

更改此行

 analysis['rsi'] = ta.RSI(spyidx.Close) 

到:

 analysis['rsi'] = ta.RSI(np.array(spyidx.Close))