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

如何高效归一化DataFrame中多列JSON Blob数据?

高效处理多列JSON Blob并归一化到原DataFrame

核心思路

先批量解析所有JSON列的字符串为字典,再逐列归一化并添加列名后缀,最后合并回原DataFrame。全程利用Pandas矢量化操作替代逐行循环,大幅提升处理效率。

步骤与代码示例

  1. 导入依赖库
import pandas as pd
import json
from pandas import json_normalize
  1. 定义JSON解析函数(兼容NaN和解析错误)
def parse_json(s):
    if pd.isna(s):
        return {}
    try:
        return json.loads(s)
    except json.JSONDecodeError:
        return {}  # 解析失败时返回空字典,确保后续归一化流程不中断
  1. 选择目标JSON列
    如果JSON列命名为JSON_0到JSON_99,推荐按列名前缀筛选(不受列位置变动影响):
# 方式1:按列名前缀筛选(优先推荐)
json_cols = data_frame.filter(like='JSON_').columns

# 方式2:按列位置筛选(0到99列,左闭右开)
# json_cols = data_frame.columns[0:100]
  1. 批量解析JSON列
    用applymap批量将所有JSON列的字符串转为字典结构:
parsed_json_df = data_frame[json_cols].applymap(parse_json)
  1. 归一化并合并到原DataFrame
    遍历每个解析后的列,归一化后给字段添加原列名后缀(避免字段名冲突),再合并到原表:
result_df = data_frame.copy()

for col in json_cols:
    # 归一化当前列的解析结果
    normalized = json_normalize(parsed_json_df[col])
    # 给字段添加后缀(比如JSON_0的字段变为id_0、random_number_0)
    suffix = col.split('_')[-1]
    normalized.columns = [f"{field}_{suffix}" for field in normalized.columns]
    # 合并到结果表
    result_df = pd.concat([result_df, normalized], axis=1)

# 可选:删除原JSON列(如果不需要保留)
result_df = result_df.drop(json_cols, axis=1)

错误原因说明

你之前触发的IndexingError: Too many indexers是因为iloc[:, JSON_0, JSON_99]用法错误——iloc的第二个参数仅支持单个索引、切片或索引列表,不能传入多个独立索引值。正确的多列选择应该用切片(如iloc[:, 0:100])或索引列表(如iloc[:, list(range(100))])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:31:42