来自嵌套字典的 Pandas 数据框在单列中

Posted

技术标签:

【中文标题】来自嵌套字典的 Pandas 数据框在单列中【英文标题】:Pandas data frame from nested dictionary in a single column 【发布时间】:2019-02-23 08:47:15 【问题描述】:

我从this web page 下载了一个.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(一个字典)转换为 pandas 数据框。主要的是 data 字典是嵌套的,更复杂的是,有一个嵌套的列 (Groups)。

我找到了this solution,它为一个“统一”的嵌套字典完成了这项工作,如下所示:

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'

“统一嵌套”是指上面数据框中的外部和内部键具有相同数量的键:1215both 两个键 Category 1Category 2,最后还有两个键att 1att 2,而我的data 不是这种情况。

【问题讨论】:

你的预期输出是什么? 【参考方案1】:

当我查看您的数据时,我发现并发症来自群体,因此我决定将其隔离并单独处理:

我决定为每个组创建一个数据框:

代码如下:

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']

您可以从它们或其他数据框创建系列。

如果您知道数据是如何生成的,您可以进行进一步分析并构建您的 data.frame

【讨论】:

简洁的答案,我没有指定输出,因为目的确实是为了了解它的外观。

以上是关于来自嵌套字典的 Pandas 数据框在单列中的主要内容,如果未能解决你的问题,请参考以下文章

来自 Python 嵌套字典的 Pandas Dataframe

用 Pandas 数据框中的行填充嵌套字典

如何将嵌套的 np.array 转换为 pandas 数据框单列

在另一个字典中嵌套一个计数器,其中键是数据框列

在 Pandas Dataframe 列中的嵌套字典中搜索和替换

Pandas 数据框到嵌套字典,名称空间为 None