使用pandas json_normalize时将null替换为空数组/字典的实现方法
pandas json_normalize null值替换解决方案
核心处理逻辑
在调用json_normalize之前先对原始JSON数据做预处理,将指定字段/全局的null值替换为你需要的空数组或空字典即可解决报错问题。
代码实现
1. 导入依赖库
import pandas as pd import json
2. 通用null值替换函数
支持全局替换所有null为指定值,可自定义替换为数组/字典:
def replace_null(obj, replace_val=[]): if isinstance(obj, dict): return {k: replace_null(v, replace_val) for k, v in obj.items()} elif isinstance(obj, list): return [replace_null(item, replace_val) for item in obj] elif obj is None: return replace_val else: return obj
3. 完整使用示例(基于你提供的样例数据)
# 原始样例数据 raw_data = { "id": { "0": "x0123455", "1": "x0123456" }, "team": { "0": None, "1": [ { "name": "Jenny", "email": "jenny@gmail.com" } ] } } # 替换所有null为空数组,若要替换为空字典则把replace_val改成{}即可 processed_data = replace_null(raw_data, replace_val=[]) # 转换为行格式后调用json_normalize rows = [] for idx in raw_data['id'].keys(): rows.append({ "id": raw_data['id'][idx], "team": processed_data['team'][idx] }) # 展开team字段生成结构化DataFrame df = pd.json_normalize( rows, record_path='team', meta='id', record_prefix='team_', errors='ignore' ) print(df)
补充说明
- 若不需要展开嵌套的team字段,直接调用
pd.json_normalize(rows)即可,空数组会作为字段值正常保留 errors='ignore'参数可进一步避免特殊异常导致的程序中断,和预处理逻辑搭配使用稳定性更高- 你目前使用的过滤null值方案适合不需要保留对应行的场景,预处理替换方案可以完整保留所有行数据,不会丢失信息
内容的提问来源于stack exchange,提问作者JamesBowery
相关产品推荐
相关产品推荐

