如何使用Python将嵌套结构DataFrame展开为普通独立行列格式
问题说明
现有如下结构的Python列表数据集,部分记录包含嵌套的attachments字段,部分记录无该嵌套字段,需要将其处理为字段独立成列、数据规整成行的标准二维表格格式。
raw_data = [ {'id': '3253465436', 'attachments': {'data': [{'title': "Photos from post"}]}}, {'id': '248139211995219_440165304779172'} ]
解决方法
直接使用pandas内置的嵌套结构处理函数实现即可,自动兼容缺失字段场景,不需要手动写循环判断字段是否存在。
方法1:两步展平法(兼容性最好,保留所有原始行)
该方法会保留所有原始记录,无附件的记录对应附件字段自动填充空值;如果单条记录包含多个附件,会自动拆分为多行与原id匹配。
import pandas as pd # 1. 先展平外层嵌套,把attachments下的data字段提取为独立列 df = pd.json_normalize(raw_data) # 2. 将存储附件列表的列拆分为独立行,空列表/空值自动保留 df = df.explode('attachments.data').reset_index(drop=True) # 3. 将附件字典内的字段拆分为独立列 df = pd.concat( [df.drop(columns=['attachments.data']), df['attachments.data'].apply(pd.Series)], axis=1 )
处理完成后的输出结果:
id title 0 3253465436 Photos from post 1 248139211995219_440165304779172 NaN
方法2:单步展平(适合只保留有附件的记录场景)
如果不需要保留无附件的记录,可以直接指定展开路径单步完成:
df = pd.json_normalize( raw_data, record_path=['attachments', 'data'], meta=['id'], errors='ignore' )
注意事项
- 如果附件字典内包含除
title外的其他字段,上述代码会自动识别并拆分为独立列,无需手动指定列名 - 空值默认填充为
NaN,可根据需求通过df.fillna('')替换为空字符串 - 如果不需要将多附件拆分为多行,可按
id分组后对附件字段做聚合,比如将多个title合并为列表存储在同一单元格
内容的提问来源于stack exchange,提问作者Likhitha Reddy
相关产品推荐
相关产品推荐

