嵌套JSON和Pandas规范化

时间:2018-11-27 18:09:49

标签: python python-3.x pandas

我返回了一些JSON数据,如下所示:(我无法更改结构)

[
  {
    "id": "d6aca8ac",
    "owner": "test",
    "sections": {
      "summary": {
        "id": "d417cd0e",
        "notes": "",
        "created_at": "2018-11-26T19:02:06Z"
      },
      "weather": {
        "id": "7ef34660",
        "notes": ""
      },
      "task": {
        "id": "255d86dc",
        "tasks": [
          {
            "id": "t1",
            "total_hours": 176.0,
            "updated_at": "2018-11-26T19:02:06Z",
            "created_at": "2018-11-26T19:02:06Z"
          },
          {
            "id": "t2",
            "total_hours": 176.0,
            "updated_at": "2018-11-26T19:02:06Z",
            "created_at": "2018-11-26T19:02:06Z"
          }
        ]
      }
    }
  }
]

我正在尝试使用熊猫的json_normalise将任务放入这样的数据框中:

+----+-------------+----------------------+----------------------+
| id | total_hours |      updated_at      |      created_at      |
+----+-------------+----------------------+----------------------+
| t1 |         176 | 2018-11-26T19:02:06Z | 2018-11-26T19:02:06Z |
| t2 |         176 | 2018-11-26T19:02:06Z | 2018-11-26T19:02:06Z |
+----+-------------+----------------------+----------------------+

我有一个脚本,该脚本在文件夹中遍历数百个JSON文件,并根据文件名应用不同的记录路径,这对它们都有效,除了一种结构外,因此我非常想看看是否可以使用类似的东西(显然不起作用):

normalised_data = json_normalize(data=json_data, record_path=['sections', 'task', 'tasks'], meta=['id'], meta_prefix='parent_' , errors='ignore')

如果无法使用该命令样式,那么我最好的选择是什么?因此,我必须考虑分离出该特定文件。

谢谢

1 个答案:

答案 0 :(得分:1)

由于record_path不使用嵌套列表,因此以下所有路径实际上都试图索引第一个路径返回的键(即字符串),因此我假设您得到一个{ {1}}。

您必须在其自己的子列表中定义整个路径:

TypeError

pd.io.json.json_normalize(json_data, record_path=[['sections', 'task', 'tasks']])