读取JSON到Pandas DataFrame时如何保留metadata为单列?
解决方案
要保留metadata为单列,不要使用pd.json_normalize(),直接用pd.DataFrame()构造即可——因为json_normalize的核心作用就是展开嵌套JSON结构为多列,这正是你要避免的行为。
单条记录场景(你的当前情况)
修改代码最后一行,把单条记录包装成列表后传入pd.DataFrame():
import json from pathlib import Path import pandas as pd json_file_path = r"D:\asset-897428209692977.json" p = Path(json_file_path) with p.open('r', encoding='utf-8') as f: data = json.loads(f.read()) # 直接构造DataFrame,metadata会保留为单列字典 df = pd.DataFrame([data])
此时df['metadata']列存储的是完整的嵌套JSON结构(Python字典类型),不会被拆分为metadata.planner、metadata.PM这类子列,自然也不会出现因部分记录缺失键导致的列缺失问题。
多条记录场景
如果你的JSON文件是包含多条记录的数组(比如[{}, {}, ...]),直接传入pd.DataFrame()即可:
with p.open('r', encoding='utf-8') as f: data = json.loads(f.read()) # 多条记录直接构造 df = pd.DataFrame(data)
后续操作说明
如果之后需要访问metadata里的特定字段,可以通过apply或str.get实现,比如:
# 获取metadata中的planner字段 df['planner'] = df['metadata'].apply(lambda x: x.get('planner'))
内容的提问来源于stack exchange,提问作者eashwar natarajan
相关产品推荐
相关产品推荐

