如何直接读取字典式列表结构的JSON为pandas DataFrame字典?
问题描述
我的JSON文件结构为字典类型,每个键对应一个由相似字典组成的列表,示例如下:
{"People":[{"FirstName":"Max","Surname":"Smith"},{"FirstName":"Jane","Surname":"Smart"}], "Animals":[{"Breed":"Cat","Name":"WhiteSocks"},{"Breed":"Dog","Name":"Zeus"}]}
我当前使用以下代码将其转换为pandas DataFrame字典:
import pandas as pd import json # 读取JSON文件 jsonFile = 'exampleJson.json' with open(jsonFile) as j: data = json.load(j) # 转换为DataFrame字典 dfDict = {} for dfName, dfContents in data.items(): dfDict[dfName] = pd.DataFrame(dfContents) display(dfDict[dfName])
该代码能得到我需要的DataFrame字典,但处理大文件时效率较低。请问是否可以直接将JSON读取为DataFrame字典,而非先读取为JSON对象再转换?
解决方案
当然可以,你可以利用pandas.read_json直接读取文件,再通过字典推导式快速生成DataFrame字典,这样能避免先把整个JSON对象加载到内存,处理大文件时效率更高:
import pandas as pd jsonFile = 'exampleJson.json' # 直接读取JSON文件为DataFrame raw_df = pd.read_json(jsonFile) # 字典推导式将每个列转换为对应的DataFrame dfDict = {col: pd.DataFrame(raw_df[col].tolist()) for col in raw_df.columns} # 可选:遍历显示每个DataFrame for name, df in dfDict.items(): print(f"--- {name} ---") display(df)
效率提升原因
- 跳过
json.load()步骤,pandas的JSON解析器针对大文件做了优化,内存占用和解析速度都更优 - 字典推导式比显式循环更高效,底层采用向量化操作逻辑
如果文件体量极大到无法一次性加载,还可以考虑分块读取,但针对你这种顶层为字典的结构,分块需要额外处理;若文件规模没有特别夸张,上述方法已足够显著提升效率。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

