如何解析... dict的字典列表到数据帧?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解析... dict的字典列表到数据帧?相关的知识,希望对你有一定的参考价值。

我有一个字典词典列表......基本上,它只是JSON的一大块。这里看起来像一个列表中的一个字典:

{'id': 391257, 'from_id': -1, 'owner_id': -1, 'date': 1554998414, 'marked_as_ads': 0, 'post_type': 'post', 'text': 'Весна — время обновлений. Очищаем балконы от старых лыж и API от устаревших версий: уже скоро запросы к API c версией ниже 5.0 перестанут поддерживаться.

Ожидаемая дата изменений: 15 мая 2019 года. 

Подробности в Roadmap: https://vk.com/dev/version_update_2.0', 'post_source': {'type': 'vk'}, 'comments': {'count': 91, 'can_post': 1, 'groups_can_post': True}, 'likes': {'count': 182, 'user_likes': 0, 'can_like': 1, 'can_publish': 1}, 'reposts': {'count': 10, 'user_reposted': 0}, 'views': {'count': 63997}, 'is_favorite': False}

我想将每个字典转储到框架上。如果我这样做

data = pandas.DataFrame(list_of_dicts)

我得到的框架只有两列:第一列包含键,另一列包含数据,如下所示:enter image description here

我试着在循环中做到这一点:

for i in list_of_dicts:
    tmp = pandas.DataFrame().from_dict(i)
    data = pandas.concat([data, tmp])
    print(i)

但我面对ValueError:

Traceback (most recent call last):
  File "/home/keddad/PycharmProjects/vk_group_parse/Data Grabber.py", line 68, in <module>
    main()
  File "/home/keddad/PycharmProjects/vk_group_parse/Data Grabber.py", line 61, in main
    tmp = pandas.DataFrame().from_dict(i)
  File "/home/keddad/anaconda3/envs/vk_group_parse/lib/python3.7/site-packages/pandas/core/frame.py", line 1138, in from_dict
    return cls(data, index=index, columns=columns, dtype=dtype)
  File "/home/keddad/anaconda3/envs/vk_group_parse/lib/python3.7/site-packages/pandas/core/frame.py", line 392, in __init__
    mgr = init_dict(data, index, columns, dtype=dtype)
  File "/home/keddad/anaconda3/envs/vk_group_parse/lib/python3.7/site-packages/pandas/core/internals/construction.py", line 212, in init_dict
    return arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype)
  File "/home/keddad/anaconda3/envs/vk_group_parse/lib/python3.7/site-packages/pandas/core/internals/construction.py", line 51, in arrays_to_mgr
    index = extract_index(arrays)
  File "/home/keddad/anaconda3/envs/vk_group_parse/lib/python3.7/site-packages/pandas/core/internals/construction.py", line 320, in extract_index
    raise ValueError('Mixing dicts with non-Series may lead to '
ValueError: Mixing dicts with non-Series may lead to ambiguous ordering.

在此之后,我可以用一个帖子(列表中的一个字典是一个帖子)获取数据帧,并将其中的所有数据作为列?

答案

我无法确切地弄清楚df,但我认为你只需要做一个reset_index和当前(似乎)的所有数据:

df.reset_index(inplace=True)

另外一件事,如果你想要keys作为列:

df = pd.Dataframe.from_dict(orient='columns')  
# or try `index` in columns if you don't get desired results

在for循环中:

l = []
for i in dict.keys:
    l.append(pd.DataFrame.from_dict(dict[i], orient='columns'))
df = pd.concat(l)
另一答案

不太确定你想要做什么,但你的意思是这样吗?

您只需打印数据帧即可查看数据内部。或者您可以通过以下代码打印每一个。

data = pandas.DataFrame(list_of_dicts)
print(data)

for i in data.loc[:, data.columns]:
    print(data[i])

以上是关于如何解析... dict的字典列表到数据帧?的主要内容,如果未能解决你的问题,请参考以下文章

如何将字典列表转换为 JSON

Python - 将字典列表附加到嵌套的默认字典时出现关键错误

如何在Python中合并字典中的所有数据框[重复]

将包含字典的列表字典转换为数据帧

将字典映射到数据框列中的列表

Python:如何将字典中的值提取到列表中->当前在结果中获取 dict_values() [重复]