我正在尝试使用带有以下代码的 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)