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

JSON转Pandas DataFrame遇ValueError:数组长度不一致求助

解决JSON转Pandas DataFrame时的ValueError问题

问题根源

JSON数据的data数组中存在可变长度的列表字段(比如示例里的homeGoals、awayGoals),不同条目中这些列表的长度不一致,直接使用pd.DataFrame()转换时,Pandas无法将长度不同的数组对齐为列,因此触发ValueError: All arrays must be of the same length错误。

解决方案

方法一:使用json_normalize处理嵌套结构(推荐保留列表字段)

json_normalize专门用于处理包含嵌套或列表结构的JSON,会将列表字段直接保留为DataFrame中的列表元素,避免长度不一致的问题:

import pandas as pd
from pandas import json_normalize

# 解析JSON数据并提取data部分
data = responsematchDetails.json()['data']
# 转换为DataFrame
df_matchDetails = json_normalize(data)

方法二:将列表字段展开为多列(适合需要拆分列表元素的场景)

如果需要把列表中的每个元素单独作为一列,可以将列表字段展开,缺失的元素用NaN填充:

import pandas as pd

# 解析JSON数据并提取data部分
data = responsematchDetails.json()['data']
# 先转换为临时DataFrame
temp_df = pd.DataFrame(data)

# 指定需要展开的列表字段
list_columns = ['homeGoals', 'awayGoals']
for col in list_columns:
    # 展开列表为多列,添加前缀区分
    expanded_df = pd.DataFrame(temp_df[col].tolist(), index=temp_df.index).add_prefix(f"{col}_")
    # 合并到原DataFrame并删除原列表字段
    temp_df = temp_df.drop(col, axis=1).join(expanded_df)

df_matchDetails = temp_df

验证问题字段

可以先检查哪些字段是列表类型,确认长度不一致的字段:

data = responsematchDetails.json()['data']
# 查看第一条数据中的列表字段
first_entry = data[0]
for field, value in first_entry.items():
    if isinstance(value, list):
        print(f"字段 {field} 为列表类型,当前长度: {len(value)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:27:20