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

遍历加密货币JSON数据合并生成Pandas DataFrame报错求助

问题原因

你代码的报错来源于df_cc = df_cc.set_index(df_cc_t)这一行:set_index()方法的入参仅支持列名、一维数组,或者仅包含前两类元素的列表,你直接传入了完整的DataFrame作为参数,不符合方法要求,因此触发类型错误。

你期望按时间为索引,将每个币种的close、high、low字段横向合并到总表的逻辑,不需要额外给总表重复设置索引,直接用已经设置好时间索引的单币种表和总表关联即可。

修正后代码

import requests
import json
import pandas as pd

tickers_list = ['BTC', 'ETH']
# 基础配置
tsym = "USD"
s = requests.session()
url = "https://min-api.cryptocompare.com/data/v2/histoday?"
api_key = "apikeytest12345"
cols = ['time', 'close', 'high', 'low']

df_cc = pd.DataFrame()

# 从Cryptocompare请求各币种历史OHLC数据
for ticker in tickers_list:
    res_cc = s.get(url + f"fsym={ticker}&tsym={tsym}&limit=10&api_key={api_key}").content
    data = json.loads(res_cc)
    df_cc_t = pd.json_normalize(data['Data'], record_path='Data')[cols]
    df_cc_t = df_cc_t.astype({'time': 'datetime64[s]'}).set_index('time')
    # 重命名字段,添加币种前缀
    df_cc_t = df_cc_t.rename(columns={
        "close": f"{ticker}_close",
        "high": f"{ticker}_high",
        "low": f"{ticker}_low"
    })
    # 合并逻辑:总表为空时直接赋值,否则按索引关联
    if df_cc.empty:
        df_cc = df_cc_t
    else:
        df_cc = df_cc.join(df_cc_t)

# 输出查看结果
print(df_cc)

输出说明

上述代码运行后得到的df_cc就会以时间为索引,每个币种的三个行情字段按你期望的格式横向排列,和你给出的示例结构完全一致。

内容的提问来源于stack exchange,提问作者Alexander Thomsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:48:04