假设我有一个嵌套字典“user_dict”,其结构:
-
Level 1:用户 ID(长整型)
-
Level 2:类别(字符串)
-
Level 3:各种属性(浮点数、整数等..)
例如,该字典的条目为:
user_dict[12] = {
"Category 1": {"att_1": 1,
"att_2": "whatever"},
"Category 2": {"att_1": 23,
"att_2": "another"}}
中的每个项目user_dict
具有相同的结构并且user_dict
包含大量我想要提供给 pandas DataFrame 的项目,从属性构建系列。在这种情况下,分层索引将很有用。
具体来说,我的问题是是否存在一种方法可以帮助 DataFrame 构造函数理解该系列应该根据字典中“level 3”的值构建?
如果我尝试类似的事情:
df = pandas.DataFrame(users_summary)
“级别 1”中的项目(UserId)被视为列,这与我想要实现的目标相反(将 UserId 作为索引)。
我知道我可以在迭代字典条目后构建该系列,但如果有更直接的方法,这将非常有用。一个类似的问题是询问是否可以从文件中列出的 json 对象构造 pandas DataFrame。
pandas MultiIndex 由元组列表组成。因此,最自然的方法是重塑输入字典,使其键成为与您需要的多索引值相对应的元组。然后你可以使用构建你的数据框pd.DataFrame.from_dict
,使用选项orient='index'
:
user_dict = {12: {'Category 1': {'att_1': 1, 'att_2': 'whatever'},
'Category 2': {'att_1': 23, 'att_2': 'another'}},
15: {'Category 1': {'att_1': 10, 'att_2': 'foo'},
'Category 2': {'att_1': 30, 'att_2': 'bar'}}}
pd.DataFrame.from_dict({(i,j): user_dict[i][j]
for i in user_dict.keys()
for j in user_dict[i].keys()},
orient='index')
att_1 att_2
12 Category 1 1 whatever
Category 2 23 another
15 Category 1 10 foo
Category 2 30 bar
另一种方法是通过连接组件数据帧来构建数据帧:
user_ids = []
frames = []
for user_id, d in user_dict.iteritems():
user_ids.append(user_id)
frames.append(pd.DataFrame.from_dict(d, orient='index'))
pd.concat(frames, keys=user_ids)
att_1 att_2
12 Category 1 1 whatever
Category 2 23 another
15 Category 1 10 foo
Category 2 30 bar
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)