[英]Convert dict with variable length list of dicts to pandas dataframe
我有一本字典,字典的值作為值,這些列表的長度是可變的。 我已經嘗試了很多,但是無法將數據正確轉換為Pandas數據框。
數據如下所示:
{key1: [{'column5': 40, 'column1': 1, 'column2': 6, 'column3': 170, 'column4': 300}],
key2: [{'column5': 6, 'column1': 33, 'column2': 5, 'column3': 76, 'column4': 13}],
key3: [{'column5': 7, 'column1': 44, 'column2': 2, 'column3': 67, 'column4': 13}, {'column5': 45, 'column1': 400, 'column2': 100, 'column3': 12, 'column4': 145}]}
我想要一個這樣的框架:
column1 column2 column3 ..
key1 1 6 170
key2 33 5 76
key3 33 2 67
key3 400 100 12
.
.
當使用pd.DataFrame.from_records時,或者當使用orient = index時,數據要么仍然作為字典放置在數據幀中,要么出現“數組必須具有相同的長度”之類的錯誤。 我嘗試過的一些方法:
df = pd.DataFrame.from_dict(a, orient='index')
df.transpose() //Data is not properly placed in the dataframe
df = pd.DataFrame.from_records(dataset, orient='index') //Data is not properly placed in the dataframe
df = pd.DataFrame.from_records(dataset) //Gives error about length of arrays
df = pd.DataFrame.from_dict(dataset).T //Gives error about length of arrays
我應該怎么做? 非常感謝!
設定
dct = {'key1': [{'column5': 40, 'column1': 1, 'column2': 6, 'column3': 170, 'column4': 300}],'key2': [{'column5': 6, 'column1': 33, 'column2': 5, 'column3': 76, 'column4': 13}],'key3': [{'column5': 7, 'column1': 44, 'column2': 2, 'column3': 67, 'column4': 13}, {'column5': 45, 'column1': 400, 'column2': 100, 'column3': 12, 'column4': 145}]}
使用列表推導稍微重構輸入數據集:
pd.DataFrame([{'key': k, **i} for k, v in dct.items() for i in v])
column1 column2 column3 column4 column5 key
0 1 6 170 300 40 key1
1 33 5 76 13 6 key2
2 44 2 67 13 7 key3
3 400 100 12 145 45 key3
為了更好地理解為什么這樣做,這是列表理解創建的詞典列表:
[{'key': 'key1', 'column5': 40, 'column1': 1, 'column2': 6, 'column3': 170, 'column4': 300}, {'key': 'key2', 'column5': 6, 'column1': 33, 'column2': 5, 'column3': 76, 'column4': 13}, {'key': 'key3', 'column5': 7, 'column1': 44, 'column2': 2, 'column3': 67, 'column4': 13}, {'key': 'key3', 'column5': 45, 'column1': 400, 'column2': 100, 'column3': 12, 'column4': 145}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.