[英]Nested dictionary to pandas DataFrame
我的數據如下所示:
{ outer_key1 : [ {key1: some_value},
{key2: some_value},
{key3: some_value} ],
outer_key2 : [ {key1: some_value},
{key2: some_value},
{key3: some_value} ] }
內部數組的長度始終相同。 key1,key2,key3也始終相同。
我想將其轉換為pandas DataFrame,其中outer_key1,outer_key2,...是索引,key1,key2,key3是列。
編輯:
數據中存在一個問題,我認為這是給定解決方案無法正常工作的原因。 在某些情況下,內部數組中有三個None
而不是三個字典。 像這樣:
outer_key3: [ None, None, None ]
這是一種方法:
d = { 'O1' : [ {'K1': 1},
{'K2': 2},
{'K3': 3} ],
'O2' : [ {'K1': 4},
{'K2': 5},
{'K3': 6} ] }
d = {k: { k: v for d in L for k, v in d.items() } for k, L in d.items()}
df = pd.DataFrame.from_dict(d, orient='index')
# K1 K2 K3
# O1 1 2 3
# O2 4 5 6
替代解決方案:
df = pd.DataFrame(d).T
None
數據的更麻煩的方法:
d = { 'O1' : [ {'K1': 1},
{'K2': 2},
{'K3': 3} ],
'O2' : [ {'K1': 4},
{'K2': 5},
{'K3': 6} ],
'O3' : [ {'K1': None},
{'K2': None},
{'K3': None} ] }
d = {k: v if isinstance(v[0], dict) else [{k: None} for k in ('K1', 'K2','K3')] for k, v in d.items()}
d = {k: { k: v for d in L for k, v in d.items() } for k, L in d.items()}
df = pd.DataFrame.from_dict(d, orient='index')
# K1 K2 K3
# O1 1.0 2.0 3.0
# O2 4.0 5.0 6.0
# O3 NaN NaN NaN
來自Jpp的數據
pd.Series(d).apply(lambda x : pd.Series({ k: v for y in x for k, v in y.items() }))
Out[1166]:
K1 K2 K3
O1 1 2 3
O2 4 5 6
更新
pd.Series(d).apply(lambda x : pd.Series({ k: v for y in x for k, v in y.items() }))
Out[1179]:
K1 K2 K3
O1 1.0 2.0 3.0
O2 4.0 5.0 6.0
O3 NaN NaN NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.