如何将字典列表的列表解嵌到DataFrame中?

How to de-nested a list of list of dictionary into a DataFrame?

提问人:Phạm Tấn Thành 提问时间:11/12/2022 最后编辑:Phạm Tấn Thành 更新时间:11/14/2022 访问量:36

问:

我有一个这样的词典列表

['[{"date_update":"31-03-2022","diemquatrinh":"6.0"}]',  

'[{"date_update":"28-04-2022","diemquatrinh":"6.5"}]', 

'[{"date_update":"25-12-2021","diemquatrinh":"6.0"}, {"date_update":"28-04-2022","diemquatrinh":"6.25"},{"date_update":"28-07-2022","diemquatrinh":"6.5"}]',

'[{"date_update":null,"diemquatrinh":null}]']

    

我不知道如何将它们制作成具有 2 列的 DataFrame。我期待着你的帮助。谢谢!

updated_at Diemquatrinh(迪姆夸特林酒店)
11-03-2022 6.25
25-12-2021 6.0
28-04-2022 6.25
28-07-2022 6.5
Python 数据帧 嵌套列表

评论

0赞 Kaneki21 11/12/2022
外部列表/数组中的每个元素都是 a 还是 proper ?stringlist
0赞 Vin 11/12/2022
您提供的数据看起来像一个字符串列表。这是您的实际数据,还是您的意思是呈现一个子列表列表,每个子列表包含一个字典,每个字典包含两个键?

答:

1赞 Bushmaster 11/12/2022 #1

首先,将字符串转换为字典。

import pandas as pd
import json

example_data=['[{"date_update":"31-03-2022","diemquatrinh":"6.0"}]',  

'[{"date_update":"28-04-2022","diemquatrinh":"6.5"}]', 

'[{"date_update":"25-12-2021","diemquatrinh":"6.0"}, {"date_update":"28-04-2022","diemquatrinh":"6.25"},{"date_update":"28-07-2022","diemquatrinh":"6.5"}]',

'[{"date_update":null,"diemquatrinh":null}]']

listt=[]
for i in example_data:
    listt.append(json.loads(i))

当我检查数据时,每个字典都有相同的键。这意味着我可以将所有词典收集在一个列表中。


main_list = [item for sublist in listt for item in sublist]
print(main_list)
'''
[{'date_update': '31-03-2022', 'diemquatrinh': '6.0'}, {'date_update': '28-04-2022', 'diemquatrinh': '6.5'}, {'date_update': '25-12-2021', 'diemquatrinh': '6.0'}, {'date_update': '28-04-2022', 'diemquatrinh': '6.25'}, {'date_update': '28-07-2022', 'diemquatrinh': '6.5'}, {'date_update': None, 'diemquatrinh': None}]
'''

剩下的就是将列表转换为数据帧:

df=pd.DataFrame(main_list)
print(df)
'''
    date_update diemquatrinh
0   31-03-2022  6.0
1   28-04-2022  6.5
2   25-12-2021  6.0
3   28-04-2022  6.25
4   28-07-2022  6.5
5   None        None

'''

评论

0赞 Phạm Tấn Thành 11/14/2022
谢谢你的回答。您的代码可以完美运行。你能帮我解决另一个类似的问题吗,但更难。这是它的链接 stackoverflow.com/questions/74426788/...