python-3.x - 有没有一种方法可以从这个特定的字典中创建一个多索引数据帧来保持数据的完整性?
问题描述
我有以下字典,我想将其转换为多索引(在列上)DataFrame:
fdict = {}
fdict['apple'] = {}
fdict['banana'] = {}
fdict['apple']['green'] = 5
fdict['apple']['red'] = 3
fdict['banana']['light_yellow'] = 10
fdict['appraisal round'] = 1
fdict
{'apple': {'green': 5, 'red': 3},
'banana': {'light_yellow': 10},
'appraisal round': 1}
我已设法将其转换为我想要的多索引(在列上)DataFrame,如下所示:
import numpy as np
import pandas as pd
fruit_array = []
quality_array = []
values_array = []
for key in [key for key in fdict.keys() if key != 'appraisal round']:
keys = fdict[key].keys()
fr_array = np.repeat(key,len(keys))
fruit_array.extend(fr_array)
quality_array.extend(keys)
val_array = fdict[key].values()
values_array.extend(val_array)
columns_index = pd.MultiIndex.from_arrays([fruit_array,quality_array])
df = pd.DataFrame(data=np.reshape(values_array,(1,len(values_array))),columns=columns_index,index=[fdict['appraisal round']])
df
apple banana
green red light_yellow
1 5 3 10
我对这种方法有一个特别的担忧,即(据我了解)字典不是专门排序的(除非您使用和排序的字典,我不想在这里使用)并且我将循环中的数据提取到数组中其中对于生成的 DataFrame 的构建很重要。我需要一种方法来保持数据链接的完整性,而不依赖于数据将以正确的顺序提取的事实。
那么,是否有一种首选方法可以显式维护字典中的键、值对关系,同时从中创建 DataFrame?此外,更少的代码行会很棒。
谢谢!
解决方案
dict
s 在 python 3.6+ 中维护插入顺序。但与其担心这一点,不如取消嵌套字典,使其更适合 MultiIndex。MultiIndex 只是具有键的元组,因此我们可以创建它。
md = {(k1, k2) : v for k1,d in fdict.items() if k1 != 'appraisal round'
for k2,v in d.items()}
pd.DataFrame(md, index=[fdict['appraisal round']])
# apple banana
# green red light_yellow
#1 5 3 10
推荐阅读
- swift - 如何将 SwiftUI 应用程序命令连接到其他视图中的函数?
- python - Python tkinter time.sleep() 替代
- mysql - 简单的应用程序没有启动(spring boot 和 MySQL)
- grid - 如何在网格文本中制作悬停图像?
- python - Python,Pycharm Flask 从包命名问题导入
- sql - 在一个表中查找两行具有不同值的所有列
- python - 从两个不同的目录获取文档内容(我的代码只适用于一个方向!)
- java - 使用反射访问数组中的java注释
- c# - 子模型属性的值始终为空
- jquery - jQuery ajax 排序