如何高效归一化DataFrame中多列JSON Blob数据?
高效处理多列JSON Blob并归一化到原DataFrame
核心思路
先批量解析所有JSON列的字符串为字典,再逐列归一化并添加列名后缀,最后合并回原DataFrame。全程利用Pandas矢量化操作替代逐行循环,大幅提升处理效率。
步骤与代码示例
- 导入依赖库
import pandas as pd import json from pandas import json_normalize
- 定义JSON解析函数(兼容NaN和解析错误)
def parse_json(s): if pd.isna(s): return {} try: return json.loads(s) except json.JSONDecodeError: return {} # 解析失败时返回空字典,确保后续归一化流程不中断
- 选择目标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]
- 批量解析JSON列
用applymap批量将所有JSON列的字符串转为字典结构:
parsed_json_df = data_frame[json_cols].applymap(parse_json)
- 归一化并合并到原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
相关产品推荐
相关产品推荐

