将 JSON 转换为 Pandas DataFrame:以正确的方式解析它们 - KDnuggets

将 JSON 转换为 Pandas DataFrame:以正确的方式解析它们 – KDnuggets

源节点: 3093512

将 JSON 转换为 Pandas DataFrame:以正确的方式解析它们
图片作者
 

深入研究数据科学和机器学习的世界,您将遇到的基本技能之一就是读取数据的艺术。如果您已经有一些经验,您可能熟悉 JSON(JavaScript 对象表示法)——一种用于存储和交换数据的流行格式。 

想一想像 MongoDB 这样的 NoSQL 数据库如何喜欢以 JSON 格式存储数据,或者 REST API 通常如何以相同的格式进行响应。

然而,JSON 虽然非常适合存储和交换,但还没有准备好对其原始形式进行深入分析。在这里,我们将其转换为更易于分析的形式——表格格式。 

因此,无论您处理的是单个 JSON 对象还是一组令人愉快的对象,用 Python 的术语来说,您本质上是在处理一个字典或一个字典列表。 

让我们一起探讨这种转变是如何展开的,使我们的数据适合分析???

今天我将解释一个神奇的命令,它允许我们在几秒钟内轻松地将任何 JSON 解析为表格格式。 

这是……pd.json_normalize()

让我们看看它如何处理不同类型的 JSON。 

我们可以使用的第一种 JSON 类型是具有一些键和值的单级 JSON。我们定义第一个简单的 JSON 如下:

作者代码

因此,让我们模拟使用这些 JSON 的需要。我们都知道 JSON 格式没什么可做的。我们需要将这些 JSON 转换为某种可读且可修改的格式……这意味着 Pandas DataFrame!

1.1 处理简单的 JSON 结构

首先,我们需要导入pandas库,然后我们可以使用命令pd.json_normalize(),如下:

import pandas as pd
pd.json_normalize(json_string)

 

通过将此命令应用于具有单个记录的 JSON,我们获得了最基本的表。但是,当我们的数据稍微复杂一点并呈现 JSON 列表时,我们仍然可以使用相同的命令而不会进一步复杂化,并且输出将对应于具有多条记录的表。

 

将 JSON 转换为 Pandas DataFrame:以正确的方式解析它们
图片作者
 

容易……对吧? 

下一个自然问题是当某些值丢失时会发生什么。 

 1.2 处理空值

想象一下某些值没有被告知,例如,大卫的收入记录丢失了。当将我们的 JSON 转换为简单的 pandas 数据帧时,相应的值将显示为 NaN。 

 

将 JSON 转换为 Pandas DataFrame:以正确的方式解析它们
图片作者 
 
如果我只想获取部分字段怎么办?

 1.3 仅选择感兴趣的列

如果我们只想将某些特定字段转换为表格 pandas DataFrame,则 json_normalize() 命令不允许我们选择要转换的字段。 

因此,应该对 JSON 进行少量预处理,仅过滤那些感兴趣的列。 

# Fields to include
fields = ['name', 'city']

# Filter the JSON data
filtered_json_list = [{key: value for key, value in item.items() if key in fields} for item in simple_json_list]

pd.json_normalize(filtered_json_list)

 

那么,让我们转向一些更高级的 JSON 结构。 

在处理多级 JSON 时,我们发现自己在不同级别内嵌套了 JSON。过程与之前相同,但在这种情况下,我们可以选择要变换的级别。默认情况下,该命令将始终展开所有级别并生成包含所有嵌套级别的串联名称的新列。 

因此,如果我们标准化以下 JSON。

作者代码

我们将得到下表,其中字段技能下有 3 列: 

  • 技能.python
  • SQL技能
  • 技能.GCP

字段角色下有 4 列 

  • 角色.项目经理
  • 角色.数据工程师
  • 角色.数据科学家
  • 角色.数据分析师

 

将 JSON 转换为 Pandas DataFrame:以正确的方式解析它们
图片作者 
 

然而,想象一下我们只是想改变我们的顶层。我们可以通过将参数 max_level 明确定义为 0(我们想要扩展的 max_level)来实现这一点。 

pd.json_normalize(mutliple_level_json_list, max_level = 0)

 

待处理的值将在 pandas DataFrame 内的 JSON 中维护。

 

将 JSON 转换为 Pandas DataFrame:以正确的方式解析它们
图片作者 

我们可以找到的最后一种情况是在 JSON 字段中有一个嵌套列表。所以我们首先定义要使用的 JSON。 

作者代码

我们可以使用 Python 中的 Pandas 有效地管理这些数据。 pd.json_normalize() 函数在这种情况下特别有用。它可以将 JSON 数据(包括嵌套列表)扁平化为适合分析的结构化格式。当此函数应用于我们的 JSON 数据时,它会生成一个规范化表,其中包含嵌套列表作为其字段的一部分。

此外,Pandas 还提供了进一步完善此流程的能力。通过利用 pd.json_normalize() 中的 record_path 参数,我们可以指示该函数专门规范化嵌套列表。 

此操作会生成一个专门用于列表内容的专用表。默认情况下,此过程只会展开列表中的元素。然而,为了用额外的上下文来丰富该表,例如为每条记录保留关联的 ID,我们可以使用元参数。

 

将 JSON 转换为 Pandas DataFrame:以正确的方式解析它们
图片作者

总之,使用 Python 的 Pandas 库将 JSON 数据转换为 CSV 文件既简单又有效。

JSON 仍然是现代数据存储和交换中最常见的格式,特别是在 NoSQL 数据库和 REST API 中。然而,在处理原始格式的数据时,它提出了一些重要的分析挑战。 

Pandas 的 pd.json_normalize() 的关键作用是处理此类格式并将数据转换为 pandas DataFrame 的好方法。 

我希望本指南有用,并且下次您处理 JSON 时,可以以更有效的方式进行操作。 

你可以去查看对应的Jupyter Notebook 以下 GitHub 存储库。
 
 

约瑟夫·费雷尔 是来自巴塞罗那的分析工程师。 他毕业于物理工程专业,目前从事应用于人类移动的数据科学领域。 他是一名专注于数据科学和技术的兼职内容创作者。 你可以联系他 LinkedIn, Twitter or .

时间戳记:

更多来自 掘金队