Это намного больше, чем может сделать автоматическая обработка Json от pandas: ваш json представляет собой сложную структуру с двумя ключевыми уровнями и содержит только списки размером 30 или 31.
В этот момент забудьте json_normalize
и запустите ручной анализ.
Первый проход, сгладьте словарь:
def flatten(data):
flat = {}
for k, v in data.items():
if isinstance(v, dict):
for j, u in flatten(v).items():
flat[k+'-'+j] = u
else:
flat[k] = v
return flat
data2 = flatten(data)
Управляйте тем, что у нас теперь есть список списков, и контролируйте размеры списков:
c = collections.Counter()
for k,v in data2.items():
if isinstance(v, list):
c[len(v)] += 1
else:
print('============', k, type(v))
Хорошо, только списки из 31 элемента, кроме одного: добавьте None
, чтобы сделать все списки равными по длине:
for k,v in data2.items():
if len(v) == 30:
v.append(None)
Теперь у нас есть словарь списков равной длины: это подходит дляпостроить фрейм данных:
df = pd.DataFrame(data2)