从嵌套字典项构造 Pandas DataFrames
给定一个嵌套字典,其结构以 UserId 作为顶层,Categories 作为第二层level,以及各种属性作为第三层,目标是创建一个具有分层索引的pandas DataFrame。每个 UserID 应显示为索引值,而类别和属性值则形成列名称。
从此类字典构造 DataFrame 的传统尝试可能会导致索引和列分配不正确。要解决此问题,请考虑以下方法:
1.重塑字典:
一种解决方案是将字典重塑为一种格式,其中键是表示所需 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'}} } df = 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')
2 一起使用。连接数据帧:
或者,可以通过为每个类别和用户构建单独的数据帧,然后连接它们来构建数据帧:
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')) df = 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
以上是如何从具有分层数据的嵌套字典高效创建 Pandas DataFrame?的详细内容。更多信息请关注PHP中文网其他相关文章!