我正在尝试将嵌套的JSON提取到具有以下结构的数据帧中:
[
{'id': '1','sort': 'kg', 'name': 'meal','detail':
[
{'subid': 'A', 'name': 'Example','values':
[
{'value': '3', 'time': 0320},
{'value': '4', 'time': 0330},
我试着用json_normalize进行抽取,但是我被第二层的‘值’卡住了。我认为这与normalize可以使用的级别数量有关。有没有其他方法可以将这种结构放入数据帧中?
我的代码是:
myJsonResponse = json.loads(response.content)
objects = pd.json_normalize(myJsonResponse, record_path='detail', meta=['id','sort','name'], errors='ignore', meta_prefix='data_')
objects.explode('values')
发布于 2021-02-26 19:24:58
它不像一行代码那么优雅,但它可以处理多个嵌套层次:
jsondata = [
{'id': '1','sort': 'kg', 'name': 'meal','detail':
[
{'subid': 'A', 'name': 'Example','values':
[
{'value': '3', 'time': 320},
{'value': '4', 'time': 330},
{'value': '5', 'time': 340}
]
}
]
}
]
import pandas as pd
rows = []
for d1 in jsondata:
row = {}
row.update( d1 )
del row['detail']
for d2 in d1['detail']:
row['subid'] = d2['subid']
row['namex'] = d2['name']
for d3 in d2['values']:
row.update(d3)
rows.append( row )
o = pd.DataFrame(rows)
print(o)
发布于 2021-03-15 03:23:01
您可以使用flatten_json
from flatten_json import flatten
jsondata = [
{'id': '1','sort': 'kg', 'name': 'meal','detail':
[
{'subid': 'A', 'name': 'Example','values':
[
{'value': '3', 'time': 320},
{'value': '4', 'time': 330},
{'value': '5', 'time': 340}
]
}
]
}
]
dic_flattened = (flatten(d, '.') for d in jsondata)
df = pd.DataFrame(dic_flattened)
输出
id sort name detail.0.subid detail.0.name detail.0.values.0.value detail.0.values.0.time detail.0.values.1.value detail.0.values.1.time detail.0.values.2.value detail.0.values.2.time
0 1 kg meal A Example 3 320 4 330 5 340
https://stackoverflow.com/questions/66374883
复制相似问题