使用Poloniex API创建DataFrame遇ValueError: arrays must all be same length如何解决?
解决Poloniex API返回数据创建DataFrame时的ValueError问题
我来帮你搞定这个问题!你遇到的ValueError: arrays must all be same length是因为Poloniex的这个API返回的JSON结构没法直接用pd.read_json()直接解析成DataFrame,具体原因和解决方法如下:
问题原因
这个API返回的是一个包含两个独立数组的JSON对象:offers(借贷报价)和demands(借贷需求)。当你直接用pd.read_json()读取这个URL时,pandas会尝试把这两个数组当作DataFrame的两列,但这两个数组的长度大概率不一样,就会触发长度不匹配的错误。
解决方案
我们需要先手动获取并解析JSON数据,分别处理两个数组后再合并成最终的DataFrame,步骤如下:
1. 导入必要的库
import pandas as pd import requests
2. 请求API并解析JSON
不要直接传给pd.read_json(),先通过requests获取数据并解析:
url = "https://poloniex.com/public?command=returnLoanOrders¤cy=ETH" # 发送请求并处理可能的网络错误 try: response = requests.get(url) response.raise_for_status() # 捕获HTTP请求错误 loan_data = response.json() except requests.exceptions.RequestException as e: print(f"请求API时出错: {e}") exit()
3. 分别转换为DataFrame并添加类型标记
把offers和demands各自转成DataFrame,同时添加一个字段区分类型:
# 处理借贷报价 offers_df = pd.DataFrame(loan_data.get('offers', [])) offers_df['order_type'] = 'offer' # 处理借贷需求 demands_df = pd.DataFrame(loan_data.get('demands', [])) demands_df['order_type'] = 'demand'
4. 合并两个DataFrame
用pd.concat()把两个DataFrame合并成一个:
final_df = pd.concat([offers_df, demands_df], ignore_index=True) # 查看结果 print(final_df.head())
这样处理后,你就能得到一个包含所有借贷订单的DataFrame,而且不会再触发长度不匹配的错误了。
额外提示
- 用
loan_data.get('offers', [])而不是直接loan_data['offers']是为了防止API返回结构变化时出现KeyError,增强代码鲁棒性。 - 加上
try-except块可以捕获网络请求或JSON解析时的异常,让代码更稳定。
内容的提问来源于stack exchange,提问作者Tamis
相关产品推荐
相关产品推荐

