如何将含嵌套字典的Python字典转换为指定格式的Pandas DataFrame
将嵌套字典转换为指定结构的Pandas DataFrame
问题描述
现有如下嵌套字典:
dct = {"123": {"street": "Sesame Street", "zip": "12345", "city": "TV Town", }, "456": {"street": "ElmStreet", "zip": "87654", "city": "Freddys Town"}, }
期望生成的DataFrame结构如下:
| street | zip | city | id |
|---|---|---|---|
| Sesame Street | 12345 | TV Town | 123 |
| ElmStreet | 87654 | Freddys Town | 456 |
但当前转换后得到的结果不符合预期:
123 456 street Sesame Street ElmStreet zip 12345 87654 city TV Town Freddys Town
需要将嵌套字典的键值对作为DataFrame的列,同时把外层字典的键作为id列,得到目标格式。
解决方案
方法1:使用from_dict并指定orient='index'
利用Pandas的from_dict方法,通过设置orient='index'将外层字典的键作为行索引,之后再重置索引并命名为id:
import pandas as pd dct = {"123": {"street": "Sesame Street", "zip": "12345", "city": "TV Town", }, "456": {"street": "ElmStreet", "zip": "87654", "city": "Freddys Town"}, } df = pd.DataFrame.from_dict(dct, orient='index') df = df.reset_index().rename(columns={'index': 'id'}) print(df)
运行输出:
id street zip city 0 123 Sesame Street 12345 TV Town 1 456 ElmStreet 87654 Freddys Town
方法2:手动构造数据列表
遍历外层字典,将每个条目转换为包含id的字典,再传入pd.DataFrame:
import pandas as pd dct = {"123": {"street": "Sesame Street", "zip": "12345", "city": "TV Town", }, "456": {"street": "ElmStreet", "zip": "87654", "city": "Freddys Town"}, } data = [] for id_val, details in dct.items(): item = details.copy() item['id'] = id_val data.append(item) df = pd.DataFrame(data) # 可选:调整列顺序匹配目标格式 df = df[['street', 'zip', 'city', 'id']] print(df)
运行输出:
street zip city id 0 Sesame Street 12345 TV Town 123 1 ElmStreet 87654 Freddys Town 456
说明
你之前得到错误结果是因为默认使用orient='columns',Pandas会把外层字典的键作为列名,内层字典的键作为行索引,和需求结构相反。指定orient='index'即可让外层键成为行,再将索引转为id列就能得到目标格式。
内容的提问来源于stack exchange,提问作者Empusas
相关产品推荐
相关产品推荐

