Я не думаю, что json_normalize
предназначен для работы в этой конкретной ориентации.Я могу ошибаться, но из документации видно, что нормализация означает «Работа со списками в каждом словаре».
Предположим, data
равно
data = json.load(open('out1.json'))['events']
Посмотрите на первую запись
data[0]['timestamp']
1537190572023
json_normalize
хочет, чтобы это был список
[{'timestamp': 1537190572023}]
Создать расширенный data2
Я не рекомендую этот подход.
Если мысоздать data2
соответственно:
data2 = [{**d, **{'timestamp': [{'timestamp': d['timestamp']}]}} for d in data]
Мы можем использовать json_normalize
json_normalize(
data2, 'timestamp',
[['event', 'json', 'level'], ['event', 'json', 'message']]
)
timestamp event.json.level event.json.message
0 1537190572023 INFO Disabled camera with QR scan on by 80801234 a...
1 1537190528619 INFO Employee number saved successfully.
Понимание
Я думаю, что проще просто сделать
pd.DataFrame([
(d['timestamp'],
d['event']['json']['level'],
d['event']['json']['message'])
for d in data
], columns=['timestamp', 'level', 'message'])
timestamp level message
0 1537190572023 INFO Disabled camera with QR scan on by 80801234 a...
1 1537190528619 INFO Employee number saved successfully.
json_normalize
Но без причудливых аргументов
json_normalize(data).pipe(
lambda d: d[['timestamp']].join(
d.filter(like='event.json')
)
)
timestamp event.json.level event.json.message
0 1537190572023 INFO Disabled camera with QR scan on by 80801234 a...
1 1537190528619 INFO Employee number saved successfully.