📜  Python Pandas – 扁平化嵌套 JSON(1)

📅  最后修改于: 2023-12-03 14:46:01.881000             🧑  作者: Mango

Python Pandas – 扁平化嵌套 JSON

在实际的数据分析工作中,我们经常会碰到需要处理嵌套 JSON 的情况,这时候 Pandas 的 flatten_json 函数可以派上用场。该函数可以将嵌套的 JSON 数据展开成扁平的表格形式,便于后续的数据分析和处理。

准备工作

首先需要安装 Pandas:

pip install pandas

此外,我们还需要定义一个 flatten_json 函数,该函数使用递归的方式将 JSON 数据展开成扁平的表格形式。

import pandas as pd
import json
from pandas.io.json import json_normalize

def flatten_json(y):
    def flatten(x, name=''):
        if isinstance(x, dict):
            for a in x:
                flatten(x[a], name + a + '_')
        elif isinstance(x, list):
            i = 0
            for a in x:
                flatten(a, name + str(i) + '_')
                i += 1
        else:
            flattened[name[:-1]] = x

    flattened = {}
    flatten(y)
    return flattened
使用例子

我们可以使用以下 JSON 数据作为例子:

{
    "name": "John Smith",
    "age": 32,
    "address": {
        "street": "123 Main St.",
        "city": "Anytown",
        "state": "CA",
        "zip": 12345
    },
    "phone": [
        {
            "type": "work",
            "number": "555-1111"
        },
        {
            "type": "home",
            "number": "555-2222"
        }
    ]
}

利用 Pandas 的 flatten_json 函数,我们可以将该 JSON 数据展开成扁平的表格形式:

example = {
    "name": "John Smith",
    "age": 32,
    "address": {
        "street": "123 Main St.",
        "city": "Anytown",
        "state": "CA",
        "zip": 12345
    },
    "phone": [
        {
            "type": "work",
            "number": "555-1111"
        },
        {
            "type": "home",
            "number": "555-2222"
        }
    ]
}

result = json_normalize(flatten_json(example))
print(result)

运行上述代码,会得到如下的输出:

    name       age address_street address_city address_state  address_zip phone_0_type phone_0_number phone_1_type phone_1_number
0  John Smith  32  123 Main St.   Anytown      CA            12345        work         555-1111      home         555-2222

可以看到,我们将嵌套的 JSON 数据展开成了扁平的表格形式。

总结

在处理嵌套的 JSON 数据时,Pandas 的 flatten_json 函数可以帮助我们将其展开成扁平的表格形式,方便后续的数据分析和处理。