python Pandas : Importing stacked dictionary of lists to create multi-indexed DataFrame

标签 python pandas dictionary

我已经将一些数据导入到列表的堆叠字典中,其结构如下:

结构一:

{product_name : {category_name : { column_title_1 :[val1,val2,val3], column_title_2 :["string 1","string 2","string 3"], column_title_3 :["string 1a","string 2b","string 3c"] }}}

结构二:

{product_name : { column_title_1 :[val1,val2,val3], column_title_2 :["string 1","string 2","string 3"], column_title_3 :["string 1a","string 2b","string 3c"], "categories" :["category1","category1","category1"]}}}

我想将字典导入 Pandas,所以它看起来像这样:

df_Structure_1

--------------------------------column_title_1-----column_title_2-----column_title_3
product_name_1---category 1-----val_1         -----string 1      -----string 1a
--------------------------------val_2         -----string 2      -----string 2b
--------------------------------val_3         -----string 3      -----string 3c
-----------------category 2-----val_4         -----string 4      -----string 4d
--------------------------------val_5         -----string 5      -----string 5e
--------------------------------val_6         -----string 6      -----string 6f
product_name_2---category 1a----val_1         -----string 1      -----string 1a
--------------------------------val_2         -----string 2      -----string 2b
--------------------------------val_3         -----string 3      -----string 3c
-----------------category 2b----val_4         -----string 4      -----string 4d
--------------------------------val_5         -----string 5      -----string 5e
--------------------------------val_6         -----string 6      -----string 6f

即产品名称和类别都有一个 multi_index。

或 df_Structure_2

--------------------------------column_title_1-----column_title_2-----column_title_3------category
product_name_1------------------val_1         -----string 1      -----string 1a     ------category1
--------------------------------val_2         -----string 2      -----string 2b     ------category1
--------------------------------val_3         -----string 3      -----string 3c     ------category1
--------------------------------val_4         -----string 4      -----string 4d     ------category2
--------------------------------val_5         -----string 5      -----string 5e     ------category2
--------------------------------val_6         -----string 6      -----string 6f     ------category2
product_name_2------------------val_1         -----string 1      -----string 1a     ------category1a
--------------------------------val_2         -----string 2      -----string 2b     ------category1a
--------------------------------val_3         -----string 3      -----string 3c     ------category1a
--------------------------------val_4         -----string 4      -----string 4d     ------category1b
--------------------------------val_5         -----string 5      -----string 5e     ------category1b
--------------------------------val_6         -----string 6      -----string 6f     ------category1b

我试过了

pd.DataFrame.from_dict(product_dict.items(), orient='index')

还有许多其他方法,例如遍历字典以构建数据框。我还没有做任何工作。

请提供解决方案,或者至少让我知道在评论中搜索的正确术语。

谢谢。

最佳答案

据我所知,pandas.DataFrame.from_dict不制作多索引数据框。另外,在你的情况下,你的一些字典键是索引,其他是列,所以你需要自己构建数据框。

您可以在内部嵌套级别使用字典迭代字典以创建数据帧列表,然后使用 pandas.concat将它们加入一个单一的多索引数据框。

让我们从更简单的结构 2(ss2 是结构 2 之后的字典)开始:

df_list2 = [pd.DataFrame(v, index=pd.MultiIndex.from_product([[k], range(len(v[list(v)[0]]))])) for k, v in ss2.items()]
df2 = pd.concat(df_list2)

df_list2 是一个数据帧列表,对于每个数据帧,多重索引已经使用 pandas.MultiIndex.from_product 准备好了,所以当使用 concat 时,结果自然而然。 MultiIndex 有 2 个级别:产品名称和具有相同产品名称的行的累进整数。

结构 1 的逻辑相同(这里 ss1 是字典`),但这里的迭代更复杂,因为多索引中将有 3 个级别:产品名称、类别名称和递进整数。

df_list1 = [pd.DataFrame(iv, index=pd.MultiIndex.from_product([[k], [ik], range(len(iv[list(iv)[0]]))])) for k, v in ss1.items() for ik, iv in v.items()]
df1 = pd.concat(df_list1)

关于 python Pandas : Importing stacked dictionary of lists to create multi-indexed DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58156432/

相关文章:

python - 如何删除 pandas.read_csv 中的索引(自动生成)

具有相同键的(嵌套)字典的 Pythonic 替代品?

python - pandas dataframe - 获取单元格具有特定值的列名列表

python - 从 Pandas 数据框中的列表中删除所有 nan 值

python - 获取 HTML 的最终结果文本

python - 获取行和列 pandas bool 数据框

python - 棘手的 : 'dict' object is not callable

python - 将字典中的键同步到列表中的多个值

python - 使用 cKDTree().query_ball_tree 时 Python 中的 MemoryError

python - 浮点除法与整数除法给出不同的答案