You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CoinGecko API拉取数据,在while循环中更新DataFrame计算交易量均值

代码调整方案

你需要调整变量初始化位置、合并逻辑,完整可运行代码如下:

import CoinGeckoAPI
import pandas as pd
import time

cg = CoinGeckoAPI()
coin_list = [code['id'] for code in cg.get_coins_list()]

# 外层初始化累计DataFrame和迭代次数,全局复用
df_accum = pd.DataFrame()
iter_count = 0

while True:
    counter = 0
    def_dict = {}
    # 分批拉取所有币种数据
    while counter < len(coin_list):
        temp_dict = cg.get_price(
            ids=coin_list[counter:counter+500],
            vs_currencies='usd',
            include_market_cap=True,
            include_last_updated_at=True,
            include_24hr_change=True,
            include_24hr_vol=True
        )
        def_dict.update(temp_dict)
        counter += 500
    
    # 所有批次拉取完成后再处理DataFrame
    df_temp = pd.DataFrame.from_dict(def_dict).T
    # 保留市值前3000币种
    df_temp = df_temp.sort_values(by=['usd_market_cap'], ascending=False)[:3000]
    
    if iter_count == 0:
        # 首次迭代直接初始化累计数据
        df_accum = df_temp.copy()
        df_accum['iterations'] = 1
        df_accum['average_vol'] = df_accum['usd_24h_vol']
    else:
        # 非首次迭代,利用索引自动对齐合并新旧数据
        # 对齐新旧币种索引,新增币种自动补全
        df_accum = df_accum.reindex(df_accum.index.union(df_temp.index))
        # 更新价格、市值、涨跌幅为最新值
        df_accum.update(df_temp[['usd', 'usd_market_cap', 'usd_24h_change', 'usd_24h_vol', 'last_updated_at']])
        # 累计24小时交易量,缺失值补0
        df_accum['usd_24h_vol'] = df_accum['usd_24h_vol'].add(df_temp['usd_24h_vol'], fill_value=0)
        # 迭代次数累加,新增币种初始次数为1
        df_accum['iterations'] = df_accum['iterations'].add(pd.Series(1, index=df_temp.index), fill_value=1)
        # 计算累计平均交易量
        df_accum['average_vol'] = df_accum['usd_24h_vol'] / df_accum['iterations']
    
    iter_count += 1
    # 每小时拉取一次修改为3600,当前60为1分钟测试间隔
    time.sleep(3600)

核心逻辑说明

你提出的两个问题解决方式如下:

  • 新旧DataFrame对比:直接利用pandas的索引对齐特性,以币种id为索引自动匹配相同币种,不需要手动写比对逻辑,新进入前3000的币种会自动加入统计,旧币种如果掉出前3000会保留历史累计数据,不需要的话可以在排序步骤过滤
  • 下一轮迭代数据准备:全局的df_accum变量会存储所有累计数据,每次迭代结束后自动保留最新状态,下一轮循环直接复用即可

内容的提问来源于stack exchange,提问作者Agustin Gonzalez Ribas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 01:24:04