首页 > 解决方案 > 将不同的加密货币和间隔添加到 1 个大数据帧或单独的数据帧(NaN 值问题)

问题描述

我将在这里提出一个非常长且困难的问题,因此我将尝试尽可能地解释这一点。所以我的目标是:例如,我想要有关比特币和以太坊的信息。我想要这两种硬币的最高价、最低价和收盘价。所以首先我想要比特币的这些价格。所以我想要的是:我首先必须从这些价格中获取 5 倍的历史数据,然后从这些价格中添加传入的新数据。因此,例如,如果我的间隔是 1 分钟,我从前 5 分钟(历史数据)中获取 5 个价格,然后每分钟添加新数据。所以在等待 5 分钟后,我有 10 个数据值(5 个历史数据,5 个新数据)。只需 1 个硬币和 1 个间隔,这一切都非常可能。每当我尝试多个区间或多个硬币时,将正确的新数据添加到正确的历史数据中变得非常困难。我的尝试是将所有值附加到 1 个非常大的数据框。所以我可以稍后搜索例如 BTCUSDT/1h(间隔),但是当我将所有这些不同的数据帧附加到 1 个大数据帧时,我会得到很多 NaN 值。我需要摆脱它们,但我觉得我正在添加不正确的 1 个大数据框。它每次通过循环时都会创建一个新的数据帧,所以我实际上想将它每次循环的数据帧存储到一个新的数据帧,但我真的不知道该怎么做。这就是为什么我一直将它附加到第一个空数据帧,并每次都更新空数据帧。所以主要问题是:如何在每次循环时从值中创建一个新的数据框,或者如何在不获取所有这些 NaN 值的情况下将其正确附加到大数据框。我希望这有点清楚,我

symbols = ['ETHUSDT','BTCUSDT']
intervals = ['30m','1h']

api_secret = ***
api_key = ***
client = Client(api_key, api_secret)

dic = {}
empty_df = pd.DataFrame()
for interval in intervals:
    for symbol in symbols:
        historical = client.get_historical_klines(symbol, interval, '11/16/2021', limit=1000)[-4:]
        df = pd.DataFrame(historical)
        df.drop([6,7,8,9,10,11], axis=1, inplace=True)
        df.columns = ['time', 'open', 'high', 'low', 'close', 'volume']
        form = {(symbol, interval, 'time'): df['time'], (symbol, interval,'open'): df['open'], \
               (symbol, interval, 'high'): df['high'], (symbol, interval,'low'): df['low'], \
               (symbol, interval, 'close'): df['close'], (symbol, interval,'volume'): df['volume']}
        df2 = empty_df.append(pd.DataFrame(form))
        empty_df = df2



[![Dataframe!][1]][1]


  [1]: https://i.stack.imgur.com/eBIAa.png
ps: SAW ERROR IN CODE WHICH MADE BTC AND ETH GIVE SAME VALUES, FIXED IT IN CODE BUT NOT PICTURE. PROBLEM STAYS THE SAME

标签: pythonpandasdataframecryptocurrency

解决方案


当然,我在发布问题后就找到了答案!这里是每个人都想知道的:不是在每个循环中添加一个数据帧到一个空数据帧,您只需将数据帧附加到一个列表并在循环之后连接该列表中的数据帧。

例子:

lst = []
for interval in intervals:
    for symbol in symbols:
        historical = client.get_historical_klines('BTCUSDT', interval, '11/16/2021', limit=1000)[-4:]
        df = pd.DataFrame(historical)
        df.drop([6,7,8,9,10,11], axis=1, inplace=True)
        df.columns = ['time', 'open', 'high', 'low', 'close', 'volume']
        form = {(symbol, interval, 'time'): df['time'], (symbol, interval,'open'): df['open'], \
               (symbol, interval, 'high'): df['high'], (symbol, interval,'low'): df['low'], \
               (symbol, interval, 'close'): df['close'], (symbol, interval,'volume'): df['volume']}
        lst.append(pd.DataFrame(form))
        
lst = pd.concat(lst, axis=1)

推荐阅读