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

如何将含嵌套字典的Python字典转换为指定格式的Pandas DataFrame

将嵌套字典转换为指定结构的Pandas DataFrame

问题描述

现有如下嵌套字典:

dct = {"123": {"street": "Sesame Street",
               "zip": "12345",
               "city": "TV Town",
               },
       "456": {"street": "ElmStreet",
               "zip": "87654",
               "city": "Freddys Town"},
       }

期望生成的DataFrame结构如下:

streetzipcityid
Sesame Street12345TV Town123
ElmStreet87654Freddys Town456

但当前转换后得到的结果不符合预期:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:55:22