【问题标题】:Python TA-Lib not working with pandas seriesPython TA-Lib 不适用于熊猫系列
【发布时间】:2014-01-31 11:54:40
【问题描述】:

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

Traceback(最近一次调用最后一次):文件“test1.py”,第 14 行,在 analysis['rsi'] = ta.RSI(spy.Close) TypeError: Argument 'real' has wrong type (expected numpy.ndarray, got Series)

当执行例如这段代码:

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)

出了什么问题?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    对于pandas >= 0.13.0:

    将 Series 直接传递给需要 ndarray 的 cython 函数 type 将不再直接工作,您必须传递 Series.values

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

    【讨论】:

      【解决方案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) 会给你你所期望的。

      【讨论】:

        【解决方案3】:

        试试

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

        【讨论】:

          【解决方案4】:

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

          改变这一行

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

          到:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-09-28
            • 2018-05-03
            • 1970-01-01
            • 2020-05-12
            • 1970-01-01
            • 1970-01-01
            • 2014-09-01
            • 1970-01-01
            相关资源
            最近更新 更多