假设我有一个带结构的嵌套字典'user_dict':
第1级: UserId(长整数)
第2级:类别(字符串)
第3级:各种属性(浮点数,整数等)
例如,这个字典的条目是:
user_dict[12] = {
"Category 1": {"att_1": 1,
"att_2": "whatever"},
"Category 2": {"att_1": 23,
"att_2": "another"}}
Run Code Online (Sandbox Code Playgroud)
"user_dict"中的每个项目具有相同的结构,"user_dict"包含大量项目,我想将这些项目提供给pandas DataFrame,从属性构建系列.在这种情况下,分层索引对于此目的是有用的.
具体来说,我的问题是,是否存在一种方法来帮助DataFrame构造函数理解该系列应该是从字典中"级别3"的值构建的?
如果我尝试类似的东西:
df = pandas.DataFrame(users_summary)
Run Code Online (Sandbox Code Playgroud)
"级别1"(用户ID)中的项目被视为列,这与我想要实现的目标相反(将用户ID作为索引).
我知道我可以在迭代字典条目后构建系列,但如果有更直接的方法,这将非常有用.类似的问题是询问是否可以从文件中列出的json对象构造pandas DataFrame.
假设我有一个如下所示的字典:
dictionary = {'A' : {'a': [1,2,3,4,5],
'b': [6,7,8,9,1]},
'B' : {'a': [2,3,4,5,6],
'b': [7,8,9,1,2]}}
Run Code Online (Sandbox Code Playgroud)
我想要一个看起来像这样的数据帧:
A B
a b a b
0 1 6 2 7
1 2 7 3 8
2 3 8 4 9
3 4 9 5 1
4 5 1 6 2
Run Code Online (Sandbox Code Playgroud)
有没有方便的方法来做到这一点?如果我尝试:
In [99]:
DataFrame(dictionary)
Out[99]:
A B
a [1, 2, 3, 4, 5] [2, 3, 4, 5, 6]
b [6, 7, 8, 9, 1] [7, 8, 9, 1, 2]
Run Code Online (Sandbox Code Playgroud)
我得到一个数据框,其中每个元素都是一个列表.我需要的是一个多索引,其中每个级别对应于嵌套字典中的键和对应于列表中每个元素的行,如上所示.我想我可以做一个非常粗糙的解决方案,但我希望可能会有一些更简单的东西.
我的字典是这样的:
{'x': {'b': 10, 'c': 20}, 'y': {'b': '33', 'c': 44}}
Run Code Online (Sandbox Code Playgroud)
我想得到一个如下所示的数据框:
index col1 col2 val
0 x b 10
1 x c 20
2 y b 33
3 y c 44
Run Code Online (Sandbox Code Playgroud)
我尝试调用 pandas.from_dict(),但它没有给我想要的结果。那么,实现这一目标的最优雅、最实用的方法是什么?
编辑:实际上,我的字典的深度为 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, …Run Code Online (Sandbox Code Playgroud)