0

我正在尝试使用带有以下代码的 Krakenx 库导入 OHLC 数据,但是当我尝试将其转换为 PD Dataframe 时,我收到有关列数的错误。错误告诉我有 2 列,但如果我打印 OHLC 数据,显然还有更多。

这是代码:

    def get_ohlc (pair, interval=1, since='last'):
    api = krakenex.API()
    k = KrakenAPI(api)
    OHLC = k.get_ohlc_data(pair = pair, interval = interval, since = since)
    data = pd.DataFrame(OHLC, columns=['Time', 'Open', 'High', 'Low', 'Close', 'vwap', 'volume', 'count'])
    data['Time'] = pd.to_datetime(data['Time'], unit='s')
    data.set_index('Time',inplace=True)
    data = data.drop(['vwap', 'count'], axis=1)
    data['Open']  = data.Open.astype(float)
    data['High']  = data.High.astype(float)
    data['Low']   = data.Low.astype(float)
    data['Close'] = data.Close.astype(float)
    data['volume'] = data.volume.astype(float)
    data = data.assign (vwap = data.groupby(data.index.date, group_keys=False).apply(vwap_func))
    return data

def vwap_func(data):
    H = data.High
    L = data.Low
    C = data.Close
    V = data.volume
    res = ((V * ((H+L+C)/3)).cumsum()) / V.cumsum()
    return res.to_frame()

def load_data(pair, path):
    data = pd.read_json(path + pair + '.json' , orient='split')
    tmp = data.tail(1).index                    
    tmp = tmp.strftime('%Y-%m-%d %H:%M:%S')     
    dt = str_to_datetime(tmp[0])                
    ts = dt.timestamp()                         
    btz = pd.DataFrame(data)
    print(btz)
    return btz, ts,

def str_to_datetime(datestr):
    Y = int(datestr[0:4])
    M = int(datestr[5:7])
    D = int(datestr[8:10])
    H = int(datestr[11:13])
    m = int(datestr[14:16])

    return datetime.datetime(Y, M, D, H, m, 0, tzinfo=tz.gettz("Etc/GMT"))

import krakenex
import pandas as pd
import datetime
import os
from dateutil import tz
from pykrakenapi import KrakenAPI

path = os.path.dirname(os.path.abspath(__file__)) + '/historical_data/'
pair = 'XXBTZEUR'

while True:
    if os.path.exists(path + pair + '.json') == False:
        data = get_ohlc(pair, 1) # 1 minute timeframe
        data.to_json(path + pair + '.json', orient='split')
    else:
        data1, ts = load_data(pair, path)
        data2 = get_ohlc(pair, 1, ts)
        data3 = pd.concat([data1, data2])
        data3.drop(data3.tail(1).index,inplace=True) # delete last record because it's not ended
        data3.to_json(path + pair + '.json', orient='split')

错误发生在这里: data = pd.DataFrame(OHLC, columns=['Time', 'Open', 'High', 'Low', 'Close', 'vwap', 'volume', 'count'])

我得到的错误是: ValueError: Shape of passed values is (2, 1), indices imply (2, 8)

4

0 回答 0