如何在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
相关产品推荐
相关产品推荐

