Python中如何将嵌套字典数组转为指定列名的Pandas DataFrame?
问题:将嵌套字典数组转换为指定列名的DataFrame
给定嵌套字典数组如下:
data = [{ 'id':1, 'points': [{'name':'P01', 'coor' : {'x':1,'y':8} }, {'name':'P02', 'coor' : {'x':2,'y':8} }], }, { 'id':2, 'points': [{'name':'P03', 'coor' : {'x':33,'y':8} }, {'name':'P04', 'coor' : {'x':2,'y':18} }], }]
使用pd.DataFrame.from_dict(data)转换后,得到的列是['id','points'],但期望输出的列名为['id','points:name','points:coor:x','points:coor:y'],可通过以下步骤实现:
解决方案
步骤1:展开数组型字段
先将points数组拆分为多行,每个数组元素对应一行,保留id关联:
import pandas as pd df = pd.DataFrame(data).explode('points', ignore_index=True)
步骤2:扁平化嵌套字典
使用pd.json_normalize解析points中的嵌套结构,自动生成层次化列名:
df_points = pd.json_normalize(df['points'])
步骤3:合并列并重命名
将原id列与扁平化后的列合并,同时修改列名以匹配需求格式:
res = pd.concat([df[['id']], df_points], axis=1) res.columns = ['id', 'points:name', 'points:coor:x', 'points:coor:y']
执行后打印列名:
print(res.columns) # 输出:Index(['id', 'points:name', 'points:coor:x', 'points:coor:y'], dtype='object')
最终得到的DataFrame结构如下:
| id | points:name | points:coor:x | points:coor:y |
|---|---|---|---|
| 1 | P01 | 1 | 8 |
| 1 | P02 | 2 | 8 |
| 2 | P03 | 33 | 8 |
| 2 | P04 | 2 | 18 |
内容的提问来源于stack exchange,提问作者jakeMantle
相关产品推荐
相关产品推荐

