计算 pandas DataFrame 中列与上一列的差异
Calculate the difference between column and the previous column in pandas DataFrame
我使用 binance-api 每 1 分钟从 binance 中提取 BTCUSDT 的实时数据,我想计算当前蜡烛收盘价与前一个蜡烛之间的百分比变化
我尝试了以下方法:
def get_live_data(symbol):
candles = pd.DataFrame(Client.get_klines(symbol=symbol, interval=Client.KLINE_INTERVAL_1MINUTE,
limit=1,
startTime=None,
endTime=None))
candles.columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Close_Time',
'Quote_Volume', 'Trades_Count', 'BUY_VOL', 'BUY_VOL_VAL', 'x']
candles["Close_Time"] = pd.to_datetime(candles["Close_Time"], unit='ms')
candles["Date"] = pd.to_datetime(candles["Date"], unit="ms")
candles["pct_change1M"] = candles.Close
candles["Open"] = pd.to_numeric(candles["Open"])
candles["High"] = pd.to_numeric(candles["High"])
candles["Low"] = pd.to_numeric(candles["Low"])
candles["Close"] = pd.to_numeric(candles["Close"])
candles["Volume"] = round(pd.to_numeric(candles["Volume"]))
candles["Quote_Volume"] = round(pd.to_numeric(candles["Quote_Volume"]))
candles['pchange1M'] = candles.Close.diff(1).fillna(0)
candles['pchange1Mpct'] = round((candles['pchange1M']/candles["Close"]) * 100, 2)
del(candles["Trades_Count"])
del(candles["BUY_VOL"])
del(candles["BUY_VOL_VAL"])
del(candles["x"])
return candles
symbol = "BTCUSDT"
while True:
candles = get_live_data(symbol="BTCUSDT")
print(candles)
time.sleep(60)
但是 pchange1M
和 pchange1Mpct
列始终为零,如下所示:(我删除了不需要的列)
Date Close pct_change1M pchange1Mpct
2021-08-18 16:45:00 45775.01 0.0 0.0
Date Close pct_change1M pchange1Mpct
2021-08-18 16:46:00 45785.0 0.0 0.0
有人可以告诉我我遗漏了什么或我做错了什么吗?
由于您有 limit=1
,您似乎一次拉一行。所以当你比较时,没有什么可以比较的。使用 fillna(0)
,您将得到 0 的差异。
我使用 binance-api 每 1 分钟从 binance 中提取 BTCUSDT 的实时数据,我想计算当前蜡烛收盘价与前一个蜡烛之间的百分比变化 我尝试了以下方法:
def get_live_data(symbol):
candles = pd.DataFrame(Client.get_klines(symbol=symbol, interval=Client.KLINE_INTERVAL_1MINUTE,
limit=1,
startTime=None,
endTime=None))
candles.columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Close_Time',
'Quote_Volume', 'Trades_Count', 'BUY_VOL', 'BUY_VOL_VAL', 'x']
candles["Close_Time"] = pd.to_datetime(candles["Close_Time"], unit='ms')
candles["Date"] = pd.to_datetime(candles["Date"], unit="ms")
candles["pct_change1M"] = candles.Close
candles["Open"] = pd.to_numeric(candles["Open"])
candles["High"] = pd.to_numeric(candles["High"])
candles["Low"] = pd.to_numeric(candles["Low"])
candles["Close"] = pd.to_numeric(candles["Close"])
candles["Volume"] = round(pd.to_numeric(candles["Volume"]))
candles["Quote_Volume"] = round(pd.to_numeric(candles["Quote_Volume"]))
candles['pchange1M'] = candles.Close.diff(1).fillna(0)
candles['pchange1Mpct'] = round((candles['pchange1M']/candles["Close"]) * 100, 2)
del(candles["Trades_Count"])
del(candles["BUY_VOL"])
del(candles["BUY_VOL_VAL"])
del(candles["x"])
return candles
symbol = "BTCUSDT"
while True:
candles = get_live_data(symbol="BTCUSDT")
print(candles)
time.sleep(60)
但是 pchange1M
和 pchange1Mpct
列始终为零,如下所示:(我删除了不需要的列)
Date Close pct_change1M pchange1Mpct
2021-08-18 16:45:00 45775.01 0.0 0.0
Date Close pct_change1M pchange1Mpct
2021-08-18 16:46:00 45785.0 0.0 0.0
有人可以告诉我我遗漏了什么或我做错了什么吗?
由于您有 limit=1
,您似乎一次拉一行。所以当你比较时,没有什么可以比较的。使用 fillna(0)
,您将得到 0 的差异。