如何将嵌套字典列表转换为Pandas DataFrame?
如何将嵌套字典列表转换为扁平化的Pandas DataFrame?
你碰到的这个问题太常见了——当你的字典列表里包含嵌套子字典(比如示例里的comments、likes、reposts这些字段)时,直接用常规的DataFrame构造方法要么得不到想要的结构,要么直接报错。
先明确你的需求:把每个VK帖子(列表里的单个字典)转成DataFrame的一行,不管是顶层字段(id、text、date)还是嵌套在子字典里的字段(比如likes.count、comments.can_post),都要变成单独的列。
最优解决方案:用pandas.json_normalize()
这是Pandas专门为处理嵌套JSON/字典结构设计的工具,一步就能生成你要的扁平化DataFrame,完全不需要写循环拼接的复杂代码。
直接运行这段代码就行:
import pandas as pd # 假设你的嵌套字典列表变量是list_of_dicts df = pd.json_normalize(list_of_dicts)
运行后你会得到一个完美的DataFrame:每一行对应一个帖子,所有嵌套字段都会被展开成类似likes.count、comments.can_post的列名,所有属性都清晰对应。
为什么之前的方法失效?
- 直接用
pd.DataFrame(list_of_dicts):Pandas会把嵌套的子字典当作单个列的“值”,而不是自动展开成新列,所以你才会得到只有两列的异常结果。 - 循环用
from_dict()拼接:from_dict()默认要求输入的字典是“键为列名,值为整列数据”的格式,但你的单个字典是“键为字段,值可能是普通值或子字典”,结构不匹配,自然触发了ValueError。
可选:自定义嵌套字段的分隔符
如果你不喜欢默认的.分隔嵌套层级,可以用sep参数指定自己想要的分隔符,比如下划线:
df = pd.json_normalize(list_of_dicts, sep='_')
这样列名就会变成likes_count、comments_can_post这种格式,更符合一些人的命名习惯。
内容的提问来源于stack exchange,提问作者keddad
相关产品推荐
相关产品推荐

