python - Python Pandas:导入列表的堆叠字典以创建多索引 DataFrame
问题描述
我已经将一些数据导入到列表的堆叠字典中,其结构如下:
结构一:
{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"]}}}
我想将字典导入熊猫,所以它看起来像这样:
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)
推荐阅读
- java - 无法在 gcp 中为服务帐户分配角色
- python - 循环遍历 pandas.dataframe 的条目或子条目
- firebase - “MethodChannelFieldValue”类型不是“FieldValuePlatform”Firebase 类型的子类型
- c - 为什么需要浮动功能
- javascript - 如何从一个 NPM 包中导出多个 ES6 模块
- whois - Rdap 查询的结果比 google.com 的 whois 少?
- jquery - 在 Laravel 中获取 http://localhost:8888/appraisal/appraisal_goals/findScore?id=2 404(未找到)
- python - 自定义处理程序中的 Django 参数数量错误
- ruby-on-rails - 在活动管理员的导航链接中禁用用户名
- python - 如何从 Telegram 获取公共频道的消息