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)])
我想使用 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)])