pandas-ta 多索引数据框

pandas-ta with multiindex dataframe

我想使用 pandas-ta。 虽然这个库的大多数方面看起来更容易进行技术分析,但我只能让它在单个代码数据帧上运行。

我想弄清楚如何让 pandas-ta 处理多索引数据帧中的多个代码。

我使用以下方法获取数据:- [stocks] 来自 csv 列表。

df = yf.download[stocks], '2021-1-1', interval='1d')

下面的 pandas-ta 下载方法只创建一个代码数据框,并且在使用 [stocks] 时只迭代第一个代码。

df.ta.ticker('GOOG', period = '1y', interval = "1h")

我当前的数据框如下所示。 (其中代码列表将发生变化)

    Adj Close   Close   High    Low Open    Volume
BTC-USD ETH-USD BTC-USD ETH-USD BTC-USD ETH-USD BTC-USD ETH-USD BTC-USD ETH-USD BTC-USD ETH-USD
Date                                                
2020-12-31  29001.720703    737.803406  29001.720703    737.803406  29244.876953    754.299438  28201.992188    726.511902  28841.574219    751.626648  46754964848 13926846861
2021-01-01  29374.152344    730.367554  29374.152344    730.367554  29600.626953    749.201843  28803.585938    719.792236  28994.009766    737.708374  40730301359 13652004358
2021-01-02  32127.267578    774.534973  32127.267578    774.534973  33155.117188    786.798462  29091.181641    718.109497  29376.455078    730.402649  67865420765 19740771179
2021-01-03  32782.023438    975.507690  32782.023438    975.507690  34608.558594    1006.565002 32052.316406    771.561646  32129.408203    774.511841  78665235202 45200463368
2021-01-04  31971.914062    1040.233032 31971.914062    1040.233032 33440.218750    1153.189209 28722.755859    912.305359  32810.949219    977.058838  81163475344 56945985763

当我尝试应用 pandas-ta 函数时,例如:

df[stocks] = data[stocks].ta.sma(length=10)

我收到错误。 AttributeError: 'Series' 对象没有属性 'ta'

当我使用文档标准方法时

sma10 = ta.sma(df["Close"], length=10)

我不知道如何针对 .csv 列表中所有代码的特定 (BTC-USD)'Close' 列 - 即。 (df['Close']

在两个示例中,pandas-ta sma 都使用了 'close' 值,但我希望能够将所有 pandas-ta 方法应用于多索引。

我只能下载'Close'数据-

data = yf.download[stocks], '2021-1-1', interval='1d')['Close']

然而,这些列将是包含 'Close' 数据的 'ticker names',我仍然遇到与 pandas-ta 试图找到 'close' 列数据相同的问题。

我不知道如何使 pandas-ta 在同一数据帧中的多个代码上运行。 有解决办法吗?

感谢您的帮助!

由于multi-column的每一列都由一个tuple组成,因此可以通过使用.loc等指定为tuple格式来处理水平格式的数据帧。通过循环处理增加了两种技术分析.最后一步是对列重新排序。如果您需要处理的不仅仅是收盘价,您可以使用收盘价作为循环的目标。

import pandas as pd
import pandas_ta as ta
import yfinance as yf

stocks = 'BTC-USD ETH-USD XRP-USD XEM-USD'

df = yf.download(stocks, '2021-1-1', interval='1d',)

technicals = ['sma10', 'sma25', 'vwma']
tickers = stocks.split(' ')

for ticker in tickers:
  for t in technicals:
    if t[:2] == 'sma':
      l = int(t[3:])
      df[(t, ticker)] = ta.sma(df.loc[:,('Close', ticker)], length=l)
    else:
      df[(t, ticker)] = ta.vwma(df.loc[:,('Close', ticker)], df.loc[:,('Volume', ticker)])