我试图在Ubuntu 12.04上使用python中的TA-Lib作为described in the official documentation。但是,当使用pandas DataFrame
或Series
时,如不同来源的多个示例所示,我得到以下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)
出了什么问题?
答案 0 :(得分:5)
对于pandas
> = 0.13.0:
将系列直接传递给期望ndarray的cython函数 类型将不会直接工作,您必须传递Series.values
因此,在TA-lib
修改其API以适应较新的pandas
版本之前,您需要使用Series.values
或DataFrame.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))