从嵌套字典构建 Pandas DataFrame
使用嵌套字典时,将数据转换为 pandas DataFrame 可能具有挑战性一种与所需结构保持一致的方式。特别是,从字典最深层提取数据作为系列可能会很麻烦。
假设您有一个结构如下的字典:
目标是使用字典第三层的数据构建具有分层索引的 DataFrame。
使用a MultiIndex
pandas MultiIndex 是在 DataFrame 中表示分层数据的便捷方法。要从嵌套字典创建 MultiIndex,请将键重塑为与多索引值对应的元组。
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')
此方法将创建一个具有分层索引的 DataFrame,其中第一级包含 UserIds 和第二级包含类别。第三层的数据现在被组织成系列,可以使用 UserId 和 Category 作为索引进行访问。
使用串联的替代方法
构造 DataFrame 的另一种方法是通过连接组件数据帧。
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)
此方法迭代字典,创建一个 DataFrame对于每个 user_id 和类别组合。然后将生成的数据帧垂直连接并使用键作为分层索引进行连接。
以上是如何从具有分层索引的嵌套字典有效构建 Pandas DataFrame?的详细内容。更多信息请关注PHP中文网其他相关文章!