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

pd.json_normalize因meta含空列表列致维度不匹配ValueError的解决方法

解决pandas json_normalize中meta包含空列表导致的广播错误

问题描述

尝试将嵌套字典列表转换为DataFrame时,使用以下代码:

meta=['column1', 'column2','column3', 'column4', 'column5', 'column6', 'column7', 'column8']
df = pd.json_normalize(json_result[0][0:198], record_path=['column9'], meta = meta[0:10][0:198] )

当meta包含column7和column8(对应值为空列表)时,触发报错:

ValueError: operands could not be broadcast together with shape (0,) (198,)

移除这两个空列表字段后程序运行正常,需解决该错误。

解决方案

报错核心原因是空列表类型的meta字段长度(0)与record_path展开后的行数(198)无法对齐广播,可通过以下两种方式解决:

1. 动态过滤空列表的meta字段

在传入meta参数前,剔除那些对应值为空列表的字段,确保所有meta字段的长度与目标数据行数匹配:

# 过滤meta中对应值为空列表的字段
filtered_meta = [
    col for col in meta 
    if any(len(item.get(col, [])) > 0 for item in json_result[0][0:198])
]
# 调用json_normalize
df = pd.json_normalize(json_result[0][0:198], record_path=['column9'], meta=filtered_meta)

若明确知道哪些字段是空列表,也可直接手动过滤:

filtered_meta = [col for col in meta if col not in ['column7', 'column8']]

2. 将空列表替换为单个空值(保留字段)

如果需要保留column7和column8字段,可将原数据中的空列表替换为None(或其他单个空值),让字段长度与目标行数匹配:

# 遍历数据,替换空列表为None
for item in json_result[0][0:198]:
    for col in ['column7', 'column8']:
        if isinstance(item.get(col), list) and len(item[col]) == 0:
            item[col] = None
# 正常调用json_normalize
df = pd.json_normalize(json_result[0][0:198], record_path=['column9'], meta=meta)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:10:52