【问题标题】:Dict of dicts of dicts to DataFrame [duplicate]dicts的dicts到DataFrame [重复]
【发布时间】:2013-03-05 12:34:47
【问题描述】:

我想将 JSON 数据存储在 Python Pandas DataFrame 中

我的 JSON 数据是这样的 dicts 的 dicts

d = {
  "col1": {
    "row1": {
      "data1": "0.87", 
      "data2": "Title col1", 
      "data3": "14.4878", 
      "data4": "Title row1"
    }, 
    "row2": {
      "data1": "15352.3", 
      "data2": "Title col1", 
      "data3": "14.9561", 
      "data4": "Title row2"
    }, 
    "row3": {
      "data1": "0", 
      "data2": "Title col1", 
      "data3": "16.8293", 
      "data4": "Title row3"
    }
  }, 
  "col2": {
    "row1": {
      "data1": "0.87", 
      "data2": "Title col2", 
      "data3": "24.4878", 
      "data4": "Title row1"
    }, 
    "row2": {
      "data1": "15352.3", 
      "data2": "Title col2", 
      "data3": "24.9561", 
      "data4": "Title row2"
    }, 
    "row3": {
      "data1": "0", 
      "data2": "Title col2", 
      "data3": "26.8293", 
      "data4": "Title row3"
    }
  }
}

我这样做是为了将我的数据放入 DataFrame 中

import pandas as pd
df=pd.DataFrame(d)

我明白了

In [1]: df
Out[1]: 
                                                   col1                                               col2
row1  {'data4': 'Title col1', 'data1': '0.87', 'data3':  {'data4': 'Title col1', 'data1': '0.87', 'data3':
row2  {'data4': 'Title col2', 'data1': '15352.3', 'data  {'data4': 'Title col2', 'data1': '15352.3', 'data
row3  {'data4': 'Title col3', 'data1': '0', 'data3': '1  {'data4': 'Title col3', 'data1': '0', 'data3': '2

我的问题是我的 DataFrame 包含字典而不是值。

我想知道如何使用 Pandas DataFrame 管理多维数据(超过 2 维......这里是 3 维)。

DataFrame 中的每个 dict 都有相同的键。

【问题讨论】:

    标签: python json dictionary pandas


    【解决方案1】:
    df = pd.Panel.from_dict(d).to_frame()
    

    输出:

                       col1        col2
    major minor                        
    data1 row1         0.87        0.87
          row2      15352.3     15352.3
          row3            0           0
    data2 row1   Title col1  Title col2
          row2   Title col1  Title col2
          row3   Title col1  Title col2
    data3 row1      14.4878     24.4878
          row2      14.9561     24.9561
          row3      16.8293     26.8293
    data4 row1   Title row1  Title row1
          row2   Title row2  Title row2
          row3   Title row3  Title row3
    

    如果您不想使用面板:

    pd.concat(map(pd.DataFrame, d.itervalues()), keys=d.keys()).stack().unstack(0)
    

    【讨论】:

    • 非常感谢...我不知道“面板”的概念。但我认为它仅限于 3 个维度(就像我的情况一样)。如果您能确认或无效,我会很好!
    • 是的 Panel 是 3D,并且有一个 Panel4D 用于 4D 数据。超过 2 维的数据总是使用 MultiIndex DataFrame。
    • 谢谢,但我想将 'data1', ... 'data4' 作为“第一级”的索引,但这里不是这样
    • 是什么意思:将'data1',...'data4'作为“第一级”的索引?能举个例子吗?
    • 使用面板的解决方案给出:“面板已弃用,将在未来版本中删除。”没有 Panel 的解决方案给出:“AttributeError: 'dict' object has no attribute 'itervalues'”
    猜你喜欢
    • 2019-08-28
    • 2013-07-19
    • 2018-04-30
    • 2018-07-10
    • 2021-07-10
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多