📅  最后修改于: 2023-12-03 14:46:01.881000             🧑  作者: Mango
在实际的数据分析工作中,我们经常会碰到需要处理嵌套 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 函数可以帮助我们将其展开成扁平的表格形式,方便后续的数据分析和处理。