Python Pandas – 扁平化嵌套的JSON
通过搜刮从网络上提取的大部分数据都是JSON数据类型,因为JSON是网络应用中传输数据的首选数据类型。之所以首选JSON,是因为它在HTTP请求和响应中来回发送时非常轻巧,因为文件大小很小。
这样的JSON文件有时会很笨拙,有不同的级别和层次。这种原始格式的数据不能用于进一步处理。一般的做法是将JSON数据结构转换为Pandas Dataframe,因为它可以帮助我们更方便地操作和可视化数据。在这篇文章中,让我们考虑不同的嵌套JSON数据结构,并使用内置的和自定义的函数对它们进行扁平化。
Pandas有一个很好的内置函数,叫做json_normalize(),可以将简单到中等程度的半结构化的嵌套JSON结构平铺到平面表格。
语法:
参数:
- data – dict或dict的列表
- errors- {‘提高’,’忽略’},默认’提高’。
- sep – str,默认为’.’,嵌套记录将产生由指定分隔符分隔的名称。
- max_level – int, default None.归一化的最大级别数(dict的深度)。
示例 1:
考虑一个嵌套字典的列表,其中包含了关于学生和他们的分数的详细信息,如图所示。在这个JSON数据结构上使用pandas json_normalize,将其扁平化为一个平面表,如图所示
输出:
示例 2:
现在让我们利用max_level选项,将一个稍微复杂的JSON结构平铺到一个平面表。在这个例子中,我们考虑了max_level为0,这意味着只对JSON的第一层进行扁平化,并可以对结果进行实验。
在这里,我们考虑了一个JSON格式的不同个人的健康记录的例子。
输出:
由于我们只使用了1级扁平化,第二级被保留为一个键值对,如图所示
示例 3:
现在让我们使用与上面相同的JSON数据结构,max_level为1,这意味着将JSON的前两层扁平化,可以对结果进行实验。
输出:
在这里,与之前的例子不同,我们对JSON的前两行进行了扁平化处理,这给了扁平化表一个完整的结构。
示例 4:
最后,让我们考虑一个深度嵌套的JSON结构,通过向json_normalize函数传递元参数,它可以被转换为一个平面表,如下图所示。
在这里,在下面的代码中,我们把JSON的时间顺序传递给了一个平面表,JSON必须按照这个顺序进行解析。在下面的代码中,我们首先建议解析部门键,然后是公司和标语,然后,我们将管理层和CEO键作为一个嵌套列表传递,表明他们必须作为一个字段被解析。
输出: