Я пытаюсь преобразовать глубоко вложенную строку json в Pandas кадр данных с иерархическим мультииндексом, основанным на иерархии в json.
Я не знаю структуру json, и это будет использоваться в списке jsons с, вероятно, будет иметь различные иерархии, так что это должно быть динамически c и не может быть жестко закодировано.
Для целей этого вопроса я использую следующее данные «Примера 2» по следующей ссылке (хотя фактические данные гораздо больше и более глубоко вложены): https://support.oneskyapp.com/hc/en-us/articles/208047697-JSON-sample-files
Я использую следующий код для интерактивного выравнивания json:
import itertools as it
import pandas as pd
def flatten_json (dictionary):
def unpack(parent_key,parent_value):
if isinstance (parent_value,dict):
for key, value in parent_value.items():
temp = parent_key + "-" + key
print("parent_key: ", parent_key," key: ", key)
yield temp, value
elif isinstance(parent_value, list):
i = 0
for value in parent_value:
temp2 = parent_key + "_" + str(i)
i += 1
yield temp2, value
else:
yield parent_key, parent_value
while True:
dictionary = dict(it.chain.from_iterable(it.starmap(unpack,dictionary.items())))
if not any(isinstance(value,dict) for value in dictionary.values()) and not any(isinstance(value,list) for value in dictionary.values()):
break
return dictionary
data = ***json data from link above as a string - omitting due to length***
output_table = pd.Series(flatten_json(data)).to_frame()
Производит следующий вывод:
Я хочу произвести следующий вывод: