You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将嵌套字典列表JSON转为Pandas DataFrame并去除冗余字段

高效将嵌套JSON列表转换为Pandas DataFrame(去除冗余entry字段)

确实,json_normalize在处理大规模数据时,因为要兼容各种复杂嵌套场景,会做很多额外的解析操作,速度难免拖慢。针对你这种每个元素只有entry这一层嵌套的特定场景,我们可以用更轻量化的针对性方案,效率提升非常明显。

方案1:列表推导式提取entry后构建DataFrame(首选)

这是最直观也最高效的方法,先把每个字典里的entry值提取出来,形成平级的字典列表,再交给Pandas构建DataFrame。因为避开了json_normalize的通用嵌套解析逻辑,纯Python列表操作+Pandas原生的平级数据处理,速度能提升好几倍:

import pandas as pd

data = [{'entry':{'points': 50, 'time': '5:00', 'year': 2010}}, 
        {'entry':{'points': 25, 'time': '6:00', 'month': "february"}}, 
        {'entry':{'points':90, 'time': '9:00', 'month': 'january'}}, 
        {'entry':{'points':20, 'month': 'june'}}]

# 先提取所有entry的内容,得到平级字典列表
extracted_data = [item['entry'] for item in data]
# 直接构建DataFrame
df = pd.DataFrame(extracted_data)

方案2:用map函数简化代码

如果喜欢更简洁的写法,可以用map函数来提取entry,性能和列表推导式几乎一致,只是代码风格不同:

import pandas as pd

data = [{'entry':{'points': 50, 'time': '5:00', 'year': 2010}}, 
        {'entry':{'points': 25, 'time': '6:00', 'month': "february"}}, 
        {'entry':{'points':90, 'time': '9:00', 'month': 'january'}}, 
        {'entry':{'points':20, 'month': 'june'}}]

df = pd.DataFrame.from_records(map(lambda x: x['entry'], data))

方案3:超大规模数据用Dask并行处理

如果你的数据量达到百万级甚至更大,单进程Pandas处理起来吃力,可以用Dask做并行化处理,拆分数据分区后同时提取转换:

import pandas as pd
import dask.dataframe as dd

data = [{'entry':{'points': 50, 'time': '5:00', 'year': 2010}}, 
        {'entry':{'points': 25, 'time': '6:00', 'month': "february"}}, 
        {'entry':{'points':90, 'time': '9:00', 'month': 'january'}}, 
        {'entry':{'points':20, 'month': 'june'}}]

# 转换为Dask DataFrame,设置分区数(根据CPU核心数调整)
dask_df = dd.from_pandas(pd.DataFrame(data), npartitions=4)
# 并行提取entry并展开为列
dask_df = dask_df.apply(lambda x: x['entry'], axis=1, meta=object).apply(pd.Series, meta={'points': int, 'time': str, 'month': str, 'year': int})
# 计算得到Pandas DataFrame
df = dask_df.compute()

总结

以上方案都比json_normalize更高效,因为它们针对你这种固定单层嵌套的场景做了精准优化,跳过了通用嵌套解析的冗余步骤。其中列表推导式的方法最容易理解,性能也最优,适合绝大多数场景;如果数据量特别大,再考虑用Dask的并行方案。

内容的提问来源于stack exchange,提问作者AUK1939

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:32:58