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

이 것을 Panda DataFrame으로 변환 하여 원래 이름을 사용하여 플롯 할 수 있습니까?


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 집계 기가 Pandas의 데이터 프레임에서 작동하지 않습니까?
  • 팬더 데이터 프레임을 열 이름이있는 numpy 배열로 변환하는 방법
  • Numpy 구조화 배열을 Pandas 데이터 프레임으로 변환
  • OHLC 데이터에 대한 Pandas OHLC 집계
  • 오픈, 고가, 저가, 5 분 동안 종가 주식 데이터 파이썬
  • Python 및 Pandas를 사용하여 OHLC 주식 데이터를 다른 시간대로 변환

답변

1 jezrael Dec 09 2020 at 16:02

한 가지 아이디어는 튜플 목록에 값을 추출하기 위해 목록 이해를 사용하는 것입니다.

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