json to dataframe: вложенный список словарей - PullRequest
0 голосов
/ 06 мая 2018

Привет, у меня есть список json, который выглядит как

data = [{'entry':{'points': 50, 'time': '5:00', 'year': 2010}}, 
   {'entry':{'points': 25, 'time': '6:00', 'month': "february"}}, 
   {'entry':{'points':90, 'time': '9:00', 'month': 'january'}}, 
   {'entry':{'points':20, 'month': 'june'}}]

Как я могу из этого создать фрейм данных для панд (я хочу удалить поле ввода, так как оно избыточно)?

Следующее работает, но невероятно медленно (для больших данных)

from pandas.io.json import json_normalize    
json_normalize(data)

Это быстрее, но не так пандонично, я думаю

pd.DataFrame([d['entry'] for d in data])

Я чувствую, что должно быть лучшее решение. Я пробовал следующее без радости

json_normalize(data, ['entry'])

Есть идеи?

1 Ответ

0 голосов
/ 06 мая 2018

Я чувствую, что должно быть лучшее решение.

Определите «лучше». Вы имеете в виду быстрее? Нет, не для таких структур, как это, нет. Постижения списков оптимизированы, чтобы быть даже быстрее, чем их эквиваленты цикла for почти во всех случаях.

Вы имеете в виду что-то, что выглядит лучше? Я думаю, что понимание списка выглядит довольно хорошо, если честно.

Есть ли волшебная строчка для автоматической обработки данных в этом формате? Да! К сожалению, вы уже нашли его (json_normalize), и, как вы обнаружили, он намного медленнее, чем список comp:

In [431]: data = data * 10000

In [432]: %timeit json_normalize(data)
1.3 s ± 19.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [433]: %timeit pd.DataFrame([d['entry'] for d in data])
63.2 ms ± 1.26 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

Итак, нет, лучшего решения нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...