如何在Python中高效地从JSON文件创建DataFrame?
高效将JSON转换为Pandas DataFrame的方法
嘿,我太懂你这种循环逐行追加导致速度拉胯的痛苦了——这种写法在数据量小的时候还能凑活,数据一大简直是灾难。其实pandas本身就提供了专门优化过的工具,完全能替代这种低效的手动循环,而且代码还更优雅。
方法1:直接用pd.read_json()(最适合简单结构JSON)
如果你的JSON文件是数组型结构(每个元素对应DataFrame的一行),那直接用pandas的read_json()就能一步完成转换,这是效率最高的方式,因为它是底层矢量化实现的,比Python循环快几个量级。
示例代码:
import pandas as pd # 直接读取JSON文件并转换为DataFrame df = pd.read_json("your_data.json")
方法2:用pd.json_normalize()处理嵌套JSON
如果你的JSON是嵌套结构(比如字典里套字典/列表),手动循环提取字段不仅麻烦还慢,这时候json_normalize()就是救星——它能自动把嵌套的层级结构平铺成规整的DataFrame列。
示例代码:
import pandas as pd import json # 先读取JSON文件为Python对象(列表/字典) with open("your_nested_data.json", "r") as f: raw_json = json.load(f) # 平铺嵌套结构生成DataFrame df = pd.json_normalize(raw_json)
举个实际例子,假设你的嵌套JSON数据是这样的:
[ {"user_id": 101, "username": "jane_doe", "profile": {"age": 28, "location": "Paris"}}, {"user_id": 102, "username": "john_smith", "profile": {"age": 32, "location": "Tokyo"}} ]
用json_normalize()处理后,会得到包含user_id、username、profile.age、profile.location列的DataFrame,完美解决嵌套数据的提取问题。
为什么你的循环方法这么慢?
你之前用空DataFrame+逐行追加的方式,每次df.append()(或pd.concat)都会创建一个新的DataFrame对象,频繁的内存分配和数据拷贝会随着数据量的增长急剧拖慢速度——这其实是pandas使用中的典型反模式,一定要避免。
内容的提问来源于stack exchange,提问作者mad_datter
相关产品推荐
相关产品推荐

