如何在数据框中不断更新新值

2024-09-28 19:07:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图每隔15分钟检查一下所有加密软件的价格变化。 到目前为止,我已经能够取出所有与USDT对交易的硬币,得到它们的价格变化百分比,然后按降序排序。现在的计划是等待15分钟,再次获取数据,并将其与旧数据进行比较。这种情况每15分钟就会发生一次。(例如,假设我提取了5.30的数据,在5.45时将再次提取数据-将进行比较并选择最不稳定的硬币。在6.00时,将再次提取数据,现在必须将其与5.45的数据进行比较,依此类推。)

这就是我现在所拥有的(这是基于python的CCXT库)这段代码适用于一次性获取,我所需要的只是一些关于如何进行比较和存储/更新新值的指导。我应该创建新文件pricechange2并与之进行比较,还是应该继续在dataframe中添加和删除列

markets=exchange.fetchTickers()
with open('pricechange1.txt', 'w') as json_file:
    json.dump(markets, json_file)
with open('pricechange1.txt') as json_file:
    data = json.load(json_file)

symbol_list = [value['symbol'] for value in data.values()]

r = re.compile(".*/USDT")
filtered_list = list(filter(r.match, symbol_list))
fl = list([x for x in filtered_list if "DOWN" not in x and "UP" not in x and "BULL" not in x and "BEAR" not in x])
pp1 = []
for i in fl:
    pp = data[i]['info']['priceChangePercent']
    pp1.append(float(pp))
df = pd.DataFrame({'coinpair': fl})
df['change1'] = pp1
df = df.sort_values(by='change1', ascending=False)
print(df['coinpair'].head(10).iloc[0])
print(df.head(10))

上述代码的电流输出

      coinpair  change1
90    FTT/USDT   29.677
48    FTM/USDT   24.615
246  TORN/USDT   24.508
259  MINA/USDT   23.265
156  YFII/USDT   20.739
37   CELR/USDT   18.435
179   INJ/USDT   17.601
207  FIRO/USDT   15.848
206   TWT/USDT   15.715
126  VTHO/USDT   15.634

Tags: and数据injsondffordatanot
1条回答
网友
1楼 · 发布于 2024-09-28 19:07:41

我建议将这些东西放在单独的函数中,并使用^{}库定期运行它们(在您的情况下,每15分钟运行一次)。首先,您需要使用以下方式进行安装:

pip install schedule

然后将其导入脚本:

import schedule
import time
...

现在,将所有内容放在一个单独的函数中:

markets = None
def fetch_data():
    global markets
    markets =  exchange.fetchTickers()
    return markets

def write_to_file(data):
    with open('pricechange1.txt', 'w') as json_file:
        json.dump(data, json_file)

previous_pp = None
def form_df(data, previous_pp):
    global previous_pp
    symbol_list = [value['symbol'] for value in data.values()]

    r = re.compile(".*/USDT")
    filtered_list = list(filter(r.match, symbol_list))
    fl = list([x for x in filtered_list if "DOWN" not in x and "UP" not in x and "BULL" not in x and "BEAR" not in x])
    pp1 = []
    
    for i in fl:
        if previous_pp:
            current_pp = data[i]['info']['priceChangePercent']
            if previous_pp > current_pp:
                # do something
                # update previous_pp value
            else:
                # do something
                # update previous_pp value
        else:
            previous_pp = current_pp = data[i]['info']['priceChangePercent']
            pp1.append(float(current_pp))

    df = pd.DataFrame({'coinpair': fl})
    df['change1'] = pp1
    df = df.sort_values(by='change1', ascending=False)
    print(df['coinpair'].head(10).iloc[0])
    print(df.head(10))

并定期运行,如下所示:

schedule.every(15).minutes.do(fetch_data)
schedule.every(15).minutes.do(write_to_file, data=markets)
schedule.every(15).minutes.do(form_df, data=markets, previous_p=previous_pp)

while True:
    schedule.run_pending()
    time.sleep(1)

相关问题 更多 >