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

如何在Python中将特定结构字典转为指定列的Pandas DataFrame(含缺失值)

问题与解决方案

问题描述

现有字典:

D = {'mark': [['height', 7], ['weight', 70]],
     'david': [['height', 8], ['weight', 80]],
     'john': [['height', 9], ['weight', 90]]}

期望转换为如下格式的Pandas DataFrame:

names  height  weight
0   mark       7      70
1  david       8      80
2   john       9      90

尝试使用 df = pd.DataFrame(D) 得到错误结果:

mark         david          john
0   [height, 7]   [height, 8]   [height, 9]
1  [weight, 70]  [weight, 80]  [weight, 90]

补充问题:若字典中部分用户的属性数量不一致,比如:

D2 = {'mark': [['height', 7], ['weight', 70]],
     'david': [['height', 8], ['weight', 80]],
     'john': [['height', 9]]}

该如何处理?

解决方法

情况1:所有用户属性数量一致

把每个用户的属性列表转换成字典,再用pd.DataFrame.from_dict指定orient='index',最后重置索引并重命名列即可:

import pandas as pd

D = {'mark': [['height', 7], ['weight', 70]],
     'david': [['height', 8], ['weight', 80]],
     'john': [['height', 9], ['weight', 90]]}

# 转换每个用户的列表为字典
processed_data = {name: dict(attrs) for name, attrs in D.items()}
# 生成DataFrame并调整结构
df = pd.DataFrame.from_dict(processed_data, orient='index').reset_index()
df.columns = ['names', 'height', 'weight']
print(df)

输出结果:

names  height  weight
0   mark       7      70
1  david       8      80
2   john       9      90

情况2:用户属性数量不一致

同样使用上述方法,Pandas会自动为缺失的属性填充NaN:

import pandas as pd

D2 = {'mark': [['height', 7], ['weight', 70]],
     'david': [['height', 8], ['weight', 80]],
     'john': [['height', 9]]}

processed_data = {name: dict(attrs) for name, attrs in D2.items()}
df = pd.DataFrame.from_dict(processed_data, orient='index').reset_index()
df.columns = ['names', 'height', 'weight']
print(df)

输出结果:

names  height  weight
0   mark       7    70.0
1  david       8    80.0
2   john       9     NaN

内容的提问来源于stack exchange,提问作者mark

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 21:07:20