Кадр данных Pandas из вложенного словаря в одном столбце - PullRequest
0 голосов
/ 19 сентября 2018

Я скачал файл .json с этой веб-страницы и преобразовал его в словарь со следующими командами:

import urllib.request, json

with urllib.request.urlopen("https://www.bcusu.com/svc/voting/stats/election/paramstats/109?groupIds=1,12,7,3,6&sortBy=itemname&sortDirection=ascending") as url:
    data = json.loads(url.read().decode())
    #print(data)

Моя конечная цель - преобразовать мои data,который представляет собой словарь в фрейме данных панд.Главное, что словарь data является вложенным, и, чтобы усложнить ситуацию, есть один столбец (Groups), который является вложенным.

Я нашел это решение , который выполняет работу для «равномерно» вложенного словаря, который выглядит следующим образом:

user_dict = {12: {'Category 1': {'att_1': 1, 'att_2': 'whatever'},
              'Category 2': {'att_1': 23, 'att_2': 'another'}},
         15: {'Category 1': {'att_1': 10, 'att_2': 'foo'},
              'Category 2': {'att_1': 30, 'att_2': 'bar'}}}

Под «равномерно вложенным» я имею в виду, что все внешние и внутренние ключи в кадре данных имеют одинаковое числоклавиш: 12 и 15 имеют оба две клавиши Category 1 и Category 2, которые, наконец, также имеют две клавиши att 1 и att 2, что не так вмой data.

1 Ответ

0 голосов
/ 19 сентября 2018

Когда я просматриваю ваши данные, я вижу, что сложность возникла в группах, поэтому я решил изолировать ее и работать над ней отдельно:

Я решил создать отдельный фрейм данных для каждой отдельной группы:

вот код:

data_df = {}
for category in data.get('Groups'):
    #print(category)
    data_df[category.get('Name')] = pd.DataFrame.from_records(category.get('Items'))

Вот выход для каждой группы:

data_df['Faculty']
Eligible    IsOtherItem Name    NonVoters   RelativeTurnout Turnout Voters
0   7249    False   Faculty of Business, Law and Social Sciences    5880    4.779694    18.885363   1369
1   6226    False   Faculty of Arts, Design and Media   5187    3.627540    16.688082   1039
2   6156    False   Faculty of Computing, Engineering and the Buil...   5482    2.353188    10.948668   674
3   8943    False   Faculty of Health, Education and Life Sciences  7958    3.439006    11.014201   985
4   71  True    Other   56  0.052371    21.126761   15

И возрастной диапазон:

Eligible    IsOtherItem Name    NonVoters   RelativeTurnout Turnout Voters
0   13246   False   18 - 21 10657   9.039173    19.545523   2589
1   6785    False   22 - 25 5939    2.953704    12.468681   846
2   3133    False   26 - 30 2862    0.946163    8.649856    271
3   5392    False   Over 30 5024    1.284826    6.824926    368

и другие группы.

Оставшаяся часть является просто информационным словарем:

del data['Groups']

Вы можете создать серию из них или другого фрейма данных.

Если вы знаете, какданные были сгенерированы, вы можете провести дальнейший анализ и построить свои данные. frame

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