OHLCVという名前のデータ配列をnumpyデータフレームに変換するにはどうすればよいですか?

Dec 09 2020

私のデータは、次のように名前でしかアクセスできないという点で少し奇妙な特定のOHLCVオブジェクトで構成されています。

# rA = [<MtApi.MqlRates object at 0x000000A37A32B308>,...]
type(rA)
# <class 'list'>

ccnt = len(rA)              # 100
for i in range(ccnt):
    print('{} {} {} {} {} {} {}'.format(i, rA[i].MtTime, rA[i].Open, rA[i].High, rA[i].Low, rA[i].Close, rA[i].TickVolume))

#0 1607507400 0.90654 0.90656 0.90654 0.90656 7
#1 1607507340 0.90654 0.9066  0.90653 0.90653 20
#2 1607507280 0.90665 0.90665 0.90643 0.90653 37
#3 1607507220 0.90679 0.90679 0.90666 0.90666 22
#4 1607507160 0.90699 0.90699 0.90678 0.90678 29

私が持っているいくつかの追加のフォーマットで:

Time         Open     High     Low      Close     Volume
-----------------------------------------------------------------
1607507400   0.90654  0.90656  0.90654  0.90656   7
1607507340   0.90654  0.90660  0.90653  0.90653   20
1607507280   0.90665  0.90665  0.90643  0.90653   37
1607507220   0.90679  0.90679  0.90666  0.90666   22

私はこのようなことを試しました:

df = pd.DataFrame(data = rA, index = range(100), columns = ['MtTime', 'Open', 'High','Low', 'Close', 'TickVolume'])

# Resulting in:
# TypeError: iteration over non-sequence

どのように私は、この変換することができますことを、私は元の名前を使用して、これをプロットすることができるように、パンダのデータフレームの中に?


その後、matplotlibを使用したプロットは、次のような方法で可能になります。


import matplotlib.pyplot as plt
import pandas as pd
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
...

df = pd.DataFrame(rA)   # not working

df['time'] = pd.to_datetime(df['MtTime'], unit='s')
plt.plot(df['MtTime'], df['Open'], 'r-', label='Open')
plt.plot(df['MtTime'], df['Close'], 'b-', label='Close')
plt.legend(loc='upper left')
plt.title('EURAUD candles')
plt.show()

おそらく関連する質問(しかし私には役に立たなかった):

  • Numpy / Matplotlib-ティックデータをOHLCVに変換します
  • OHLCアグリゲーターはパンダのデータフレームで動作しませんか?
  • パンダのデータフレームを列名の付いたnumpy配列に変換する方法
  • Numpy構造化配列をPandasデータフレームに変換する
  • OHLCデータのパンダOHLC集計
  • オープン、ハイ、ロー、クローズを5分間ストックデータpython
  • Pythonとパンダを使用してOHLC株式データを別の時間枠に変換する

回答

1 jezrael Dec 09 2020 at 16:02

1つのアイデアは、タプルのリストに値を抽出するためにリスト内包表記を使用することです。

L = [(rA[i].MtTime, rA[i].Open, rA[i].High, rA[i].Low, rA[i].Close, rA[i].TickVolume) 
      for i in range(len(rA))]

df = pd.DataFrame(L, columns = ['MtTime', 'Open', 'High','Low', 'Close', 'TickVolume']))

または可能であれば:

df = pd.DataFrame({'MtTime':list(rA.MtTime), 'Open':list(rA.Open), 
                   'High':list(rA.High),'Low':list(rA.Low), 
                   'Close':list(rA.Close), 'TickVolume':list(rA.TickVolume)})