2014-01-31 6 views
6

Ich versuche, die TA-Lib in Python auf Ubuntu 12.04 als described in the official documentation zu verwenden. Wenn jedoch pandas DataFrame s oder Series verwenden, wie es in mehreren Beispielen auf unterschiedliche Quellen gezeigt, ich folgenden TypeError erhalten:Python TA-Lib arbeitet nicht mit Pandas-Serie

Traceback (most recent call last): File "test1.py", line 14, in analysis['rsi'] = ta.RSI(spy.Close) TypeError: Argument 'real' has incorrect type (expected numpy.ndarray, got Series)

Bei der Ausführung z.B. Dieser Code:

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) 

Was ist schief gelaufen?

Antwort

1

versuchen

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

Da die Fehlermeldung zeigt an, TA-lib numpy.ndarray erwartet, aber spyidx.Close ist Pandas Serie

Ändern Sie diese Zeile

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

zu:

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

Für pandas> = 0.13.0: So

Passing a Series directly to a cython function expecting an ndarray type will no long work directly, you must pass Series.values

vor TA-lib seine API überarbeitet die neueren Versionen pandas gerecht zu werden, müssen Sie Series.values oder DataFrame.values verwenden.

2

Zuerst müssen Sie abstrakte Funktionen verwenden:

import talib.abstract as ta

statt

import talib as ta

Zweitens stellen Sie sicher, richtigen Namen verwenden:

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 
}) 

Schließlich genießen : ta.SAR(ta_serie, window) wird Ihnen geben, was Sie erwartet haben.