来自嵌套字典的Pandas数据帧

2024-09-29 00:14:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我的字典是这样的:

{'x': {'b': 10, 'c': 20}, 'y': {'b': '33', 'c': 44}}

我想得到这样的数据帧:

^{pr2}$

我试着打电话熊猫。来自甩迪克特(),但没有给我想要的结果。 那么,实现这一目标最优雅、最实用的方法是什么?在

编辑:事实上,我的字典的深度是4,所以我想看看这种情况下的解决方案,或者理想情况下,一个在一般设置中适用于任意深度的解决方案。在

下面是一个更深层次词典的示例: {'x':{'a':{'m':1, 'n':2}, 'b':{'m':10, 'n':20}}, 'y':{'a':{'m':100, 'n':200}, 'b':{'m':111, 'n':222}} }适当的数据帧应该有8行。在

回答:

df = pd.DataFrame([(k1, k2, k3, k4, k5, v) for k1, k2345v in dict.items()
                           for k2, k345v in k2345v.items()
                           for k3, k45v in k345v.items()
                           for k4, k5v in k45v.items()
                           for k5, v in k5v.items()])

Tags: 数据infor字典情况itemsk2k1
2条回答

首先使用from_dict创建df,然后调用stack和{}以获得所需的形状,然后需要重命名列,排序并重置索引:

In [83]:
d={'x': {'b': 10, 'c': 20}, 'y': {'b': '33', 'c': 44}}
df = pd.DataFrame.from_dict(d, orient='index').stack().reset_index()
df.columns = ['col1', 'col2', 'val']
df.sort_values(['col1', 'col2'], inplace=True)
df.reset_index(drop=True, inplace=True)
df

Out[83]:
  col1 col2 val
0    x    b  10
1    x    c  20
2    y    b  33
3    y    c  44

可以使用列表理解将dict重新排序为一个元组列表,其中每个元组都是一行,然后可以对数据帧进行排序

import pandas as pd

d = {'x': {'b': 10, 'c': 20}, 'y': {'b': '33', 'c': 44}}

df = pd.DataFrame([(k,k1,v1) for k,v in d.items() for k1,v1 in v.items()], columns = ['Col1','Col2','Val'])
print df.sort(['Col1','Col2','Val'], ascending=[1,1,1])

  Col1 Col2 Val
3    x    b  10
2    x    c  20
1    y    b  33
0    y    c  44

相关问题 更多 >