遍历加密货币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
相关产品推荐
相关产品推荐

